0
%
正确率
0
/30
答对题目数
0
分钟
用时
单选题
数据库
1.
下列聚合函数中不忽略空值  (null) 的是()
A
SUM (列名)
B
MAX (列名)
C
COUNT ( * )
D
AVG (列名)
正确答案:C
你的答案:未作答
官方解析:
在SQL中聚合函数的NULL值处理是一个重要的知识点。COUNT(*)是唯一不忽略空值的聚合函数,它会统计表中的所有行数,包括NULL值的行。

分析各选项:

C正确:COUNT(*)会统计表中的所有记录数,不管字段是否为NULL。这是因为COUNT(*)统计的是行数而不是具体的字段值。

其他选项错误原因:
A. SUM(列名)会自动忽略NULL值,只对非NULL的数值进行求和
B. MAX(列名)在计算最大值时会自动忽略NULL值
D. AVG(列名)计算平均值时会忽略NULL值,只计算非NULL值的平均值

举例说明:
假设一个表中有5行数据,其中2行某列的值为NULL,则:
- COUNT(*) = 5(统计所有行)
- COUNT(列名) = 3(只统计非NULL值的行)
- SUM/MAX/AVG 都只会对3个非NULL值进行计算

这是数据库设计的标准行为,目的是保证聚合计算的准确性和合理性。
知识点:数据库、SQL+MySQL
题友讨论(4)
COUNT ( * )不忽略空值  (null)
COUNT ( * )不忽略空值  (null)
17 回复
发布于 2017-09-04 10:00
在统计字段没有满足条件的数值时,只有count()返回数值0或者 其他,其他聚合函数会返回null值
在统计字段没有满足条件的数值时,只有count()返回数值0或者 其他,其他聚合函数会返回null值
5 回复
发布于 2020-08-23 12:40
count(数 字) InnoDB 引擎遍历整张表,但不取值。服务层对于返回的每一行,放一个数字“1” 进去,直接按行进行累加。
count(*)InnoDB引擎并不会把全部字段取出来,而是专门做了优化,不取值,服务层直接 按行进行累加。
按照效率排序的话,count(字段) < count(主键 id) < count(1) ≈ count(*),所以尽 量使用 count(*)。
count(数 字) InnoDB 引擎遍历整张表,但不取值。服务层对于返回的每一行,放一个数字“1” 进去,直接按行进行累加。
count(*)InnoDB引擎并不会把全部字段取出来,而是专门做了优化,不取值,服务层直接 按行进行累加。
按照效率排序的话,count(字段) < count(主键 id) < count(1) ≈ count(*),所以尽 量使用 count(*)。
4 回复
发布于 2023-09-19 19:41 河北
聚合函数,除了count(*)外,其他遇到空值时会跳过,去处理其他非空值
聚合函数,除了count(*)外,其他遇到空值时会跳过,去处理其他非空值
2 回复
发布于 2020-08-28 21:04 来自Android客户端
收起
单选题
SQL
数据库
2.

从学生信息表(student)中提取姓名(name)列值为NULL的记录,下列选项正确的是()

A

SELECT * FROM student WHERE name IS NOT NULL

B

SELECT name FROM student WHERE IS NULL

C

SELECT name FROM student WHERE it IS NULL

D

SELECT * FROM student WHERE name IS NULL

正确答案:D
你的答案:未作答
官方解析:

A选项,为提取姓名列值为非NULL的记录,与题目所求不符;B选项的WHERE语句中缺少指定列名,条件不全;C选项试图用it指代列名,但SQL语句不支持该方法。

知识点:数据库、SQL
题友讨论(11)
我智障了
我智障了
13 回复
发布于 2022-03-10 16:13
题目说的是查询的是记录,而不是name,排除B、C,选择条件name为NULL,所以选D
题目说的是查询的是记录,而不是name,排除B、C,选择条件name为NULL,所以选D
10 回复
发布于 2022-04-16 14:16
*
*
3 回复
发布于 2022-01-05 15:03 来自iOS客户端
b选项前面半段也符合语法格式,但是其后续问题是where后面应该标注出name这个关键字的查询条件,a选项是not null所以其是非空的意思,sql中不存在可以使用it来代替列明的语法格式。
b选项前面半段也符合语法格式,但是其后续问题是where后面应该标注出name这个关键字的查询条件,a选项是not null所以其是非空的意思,sql中不存在可以使用it来代替列明的语法格式。
1 回复
发布于 2024-02-28 10:42 湖北 来自Android客户端
*****
*****
1 回复
发布于 2022-10-23 20:09 北京
1
1
1 回复
发布于 2021-12-14 22:07 来自Android客户端
文字游戏
文字游戏
点赞 回复
发布于 07-23 10:31 广东 来自Android客户端
窝趣,我眼盲了
窝趣,我眼盲了
点赞 回复
发布于 2024-07-09 16:44 北京 来自Android客户端
*!
*!
点赞 回复
发布于 2023-03-15 00:01 黑龙江 来自iOS客户端
B where语句缺少指定列名
B where语句缺少指定列名
点赞 回复
发布于 2022-11-29 00:08 广东 来自Android客户端
收起
  • 1
  • 2
单选题
数据库
3.

设关系RSW各有10个元组,那么这三个关系的笛卡尔积的元组个数是()。

A
10
B
30
C
1000
D
不确定
正确答案:C
你的答案:未作答
官方解析:
在关系代数中,笛卡尔积是一个基本的运算,它将两个关系的所有可能组合都列举出来。对于包含三个关系R、S、W的笛卡尔积运算:

根据题目给出的条件:
- R有10个元组
- S有10个元组
- W有10个元组

计算R×S×W的元组个数时:
1. 先计算R×S的结果:每个R中的元组都要与S中的每个元组配对,所以R×S的元组个数 = 10×10 = 100
2. 再将R×S的结果与W做笛卡尔积:(R×S)×W的元组个数 = 100×10 = 1000

因此C选项1000是正确答案。

分析其他选项:
A(10)错误:这只是单个关系的元组个数,没有进行笛卡尔积运算
B(30)错误:这像是把三个关系的元组数简单相加(10+10+10),而不是做笛卡尔积
D(不确定)错误:在已知三个关系的元组个数的情况下,笛卡尔积的结果是可以确定的,为1000个元组
知识点:数据库
题友讨论(3)
笛卡尔积的元组个数为个元组的乘积
笛卡尔积的元组个数为个元组的乘积
20 回复
发布于 2017-09-15 10:17
笛卡尔积数学概念
        笛卡尔积是指在数学中,两个集合X和Y的笛卡尓积(Cartesian product),又称直积,表示为X × Y,第一个对象是X的成员而第二个对象是Y的所有可能有序对的其中一个成员。

        笛卡尔积又叫笛卡尔乘积,是一个叫笛卡尔的人提出来的。 简单的说就是两个集合相乘的结果。 

        假设集合A={a, b},集合B={0, 1, 2},则两个集合的笛卡尔积为{(a, 0), (a, 1), (a, 2), (b, 0), (b, 1), (b, 2)}。



笛卡尔积在sql中是这样的
        我们对数据库表进行操作时,经常会对多张表进行关联,多表连接查询大家肯定不会陌生,但是一不小心很容易出来庞大冗余的数据。如下例所示:

        
--------------------- 

CSDN原文链接:https://blog.csdn.net/weienjun/article/details/80869478 

笛卡尔积数学概念
        笛卡尔积是指在数学中,两个集合X和Y的笛卡尓积(Cartesian product),又称直积,表示为X × Y,第一个对象是X的成员而第二个对象是Y的所有可能有序对的其中一个成员。

        笛卡尔积又叫笛卡尔乘积,是一个叫笛卡尔的人提出来的。 简单的说就是两个集合相乘的结果。 

        假设集合A={a, b},集合B={0, 1, 2},则两个集合的笛卡尔积为{(a, 0), (a, 1), (a, 2), (b, 0), (b, 1), (b, 2)}。



笛卡尔积在sql中是这样的
        我们对数据库表进行操作时,经常会对多张表进行关联,多表连接查询大家肯定不会陌生,但是一不小心很容易出来庞大冗余的数据。如下例所示:

        
--------------------- 

CSDN原文链接:https://blog.csdn.net/weienjun/article/details/80869478 

5 回复
发布于 2018-10-29 16:37
笛卡尔积元祖个数为各关系元祖个数的乘积,笛卡尔积属性个数为各关系属性个数的和
笛卡尔积元祖个数为各关系元祖个数的乘积,笛卡尔积属性个数为各关系属性个数的和
3 回复
发布于 2021-09-25 21:02
收起
单选题
数据库
4.
下列属于物理备份的优点的是?
I、操作简单
II、恢复简单
III、恢复时间快
IV、任何情况都可以跨平台和版本
A
I、II、III、IV
B
I、II、III
C
I、II、IV
D
II、III、IV
正确答案:B
你的答案:未作答
官方解析:
由题意得,物理备份的操作非常简单只需要将备份文件移动到指定目录即可,不需额外生成其他文件进行操作故I正确,同时恢复也非常简单快速,将文件复制到指定目录,关停数据库服务然后进行恢复即可,并且不需要执行SQL等脚本因此速度也会非常的快,故II、III正确;而在一些文件名由于浮点、大小写等格式问题时,可能就不能够跨平台or操作系统或版本进行恢复因此IV错误,故正确选项为B。
知识点:数据库
题友讨论(0)
单选题
数据库
5.

在数据库设计中,将 E R 图转换成关系数据模型的过程属于( )。

A
需求分析阶段
B
物理设计阶段
C
逻辑设计阶段
D
概念设计阶段
正确答案:C
你的答案:未作答
官方解析:
在数据库的设计过程中分为概念设计、逻辑设计和物理设计三个主要阶段。将E-R图转换成关系数据模型的过程属于逻辑设计阶段,因此C选项是正确的。

具体分析如下:

1. 逻辑设计阶段(C正确):
- 这个阶段主要是将概念模型转换为特定DBMS支持的数据模型
- E-R图到关系模型的转换是一个将抽象概念模型转换为具体的逻辑模型的过程
- 此阶段需要考虑实体、关系的转换规则,确定主键、外键等关系结构

其他选项错误原因:

A. 需求分析阶段:
- 这是数据库设计的最初阶段
- 主要任务是收集和分析用户需求,而不涉及具体模型转换

B. 物理设计阶段:
- 这是在逻辑设计之后的阶段
- 主要关注数据库的物理存储结构、访问方法等具体实现细节

D. 概念设计阶段:
- 这是在需求分析之后的阶段
- 主要任务是绘制E-R图,而不是转换E-R图

数据库设计的三个阶段是循序渐进的,E-R图的转换属于从概念到逻辑的过渡阶段,因此是逻辑设计阶段的工作。
知识点:数据库
题友讨论(6)
系统需求设计:对应为具体需求;概念设计:主要是ER图;逻辑结构设计:ER图转为相应的数据库关系;物理结构设计:与底层存储相关
系统需求设计:对应为具体需求;概念设计:主要是ER图;逻辑结构设计:ER图转为相应的数据库关系;物理结构设计:与底层存储相关
21 回复
发布于 2018-03-05 10:41
数据库设计通常分为6个阶段 1:需求分析:分析用户的需求,包括数据、功能和性能需求; 2:概念结构设计:主要采用E-R模型进行设计,包括画E-R图; 3:逻辑结构设计:通过将E-R图转换成表,实现从E-R模型到关系模型的转换; 4:数据库物理设计:主要是为所设计的数据库选择合适的存储结构和存取路径; 5:数据库的实施:包括编程、测试和试运行; 6:数据库运行与维护:系统的运行与数据库的日常维护。) 主要讨论其中的第3个阶段,即逻辑设计。 逻辑设计主要是建立数据库的逻辑模型,也就是关系数据模型。
数据库设计通常分为6个阶段 1:需求分析:分析用户的需求,包括数据、功能和性能需求; 2:概念结构设计:主要采用E-R模型进行设计,包括画E-R图; 3:逻辑结构设计:通过将E-R图转换成表,实现从E-R模型到关系模型的转换; 4:数据库物理设计:主要是为所设计的数据库选择合适的存储结构和存取路径; 5:数据库的实施:包括编程、测试和试运行; 6:数据库运行与维护:系统的运行与数据库的日常维护。) 主要讨论其中的第3个阶段,即逻辑设计。 逻辑设计主要是建立数据库的逻辑模型,也就是关系数据模型。
12 回复
发布于 2020-05-20 19:10
E-R图也称实体-联系图(Entity Relationship Diagram),提供了表示实体类型、属性和联系的方法,用来描述现实世界的概念模型
E-R图也称实体-联系图(Entity Relationship Diagram),提供了表示实体类型、属性和联系的方法,用来描述现实世界的概念模型
1 回复
发布于 2018-08-31 11:21
概念设计是er图,逻辑设计是er图到表
概念设计是er图,逻辑设计是er图到表
点赞 回复
发布于 02-24 23:51 辽宁 来自Android客户端
概念模型(E-R图用户视角)  =》  系统模型(数据库 计算机视角)  =》  物理模型(现实视角)
概念模型(E-R图用户视角)  =》  系统模型(数据库 计算机视角)  =》  物理模型(现实视角)
点赞 回复
发布于 2023-02-01 15:29 福建
逻辑设计阶段
逻辑设计阶段
点赞 回复
发布于 2021-08-31 19:50
收起
单选题
Linux
6.
在 Linux 的 Shell 下,root 用户的提示符是()
A
$
B
C
#
D
%
正确答案:C
你的答案:未作答
官方解析:
# 超级用户提示符,$ 是普通用户的提示符。
知识点:Linux、Linux
题友讨论(11)

图片说明

图片说明

17 回复
发布于 2022-03-08 19:56
不愧是大橘己定
不愧是大橘己定
点赞 回复
发布于 2022-04-14 23:11 来自Android客户端
0
这有啥吗?
这有啥吗?
点赞 回复
发布于 2022-08-31 18:51 河北 来自Android客户端
0
一般用户为$
一般用户为$
10 回复
发布于 2022-02-19 02:54 来自Android客户端
普通用户给$让root用户#官发财
普通用户给$让root用户#官发财
点赞 回复
发布于 01-14 12:26 北京
0
普通用户的标识符为:$
root用户的标识符为:#
普通用户可以通过执行:"sudo su"指令进入root状态;“exit”退出root状态
普通用户的标识符为:$
root用户的标识符为:#
普通用户可以通过执行:"sudo su"指令进入root状态;“exit”退出root状态
8 回复
发布于 2022-04-27 20:17
一直以为是$ 跟美元绑定 没想到 su才是挖#之人
一直以为是$ 跟美元绑定 没想到 su才是挖#之人
6 回复
发布于 2022-04-10 02:19 来自Android客户端
C
C
3 回复
发布于 2017-05-20 23:34
# 是超级管理员
$ 是普通用户
# 是超级管理员
$ 是普通用户
2 回复
发布于 2022-12-31 17:07 陕西
哈哈
哈哈
点赞 回复
发布于 2023-09-06 22:35 北京
0
root用户不是#?
root用户不是#?
1 回复
发布于 2024-05-01 15:58 湖北 来自Android客户端
收起
单选题
数据库
SQL
7.
以下SQL语句不可能返回null的是:(  )
A
select min(col1) from t1
B
select max(col1) from t1
C
select count(col1) from t1
D
select concat('max=', max(col1)) from t1
正确答案:C
你的答案:未作答
官方解析:
COUNT函数是SQL中的聚合函数之一,它的特点是即使在表为空的情况下也会返回0,而不会返回null。这就是为什么C选项是正确答案。

分析其他选项:

A. SELECT MIN(col1) FROM t1
当表t1为空时,MIN函数会返回null。同样,如果col1列的所有值都为null,MIN函数也会返回null。

B. SELECT MAX(col1) FROM t1
与MIN函数类似,当表t1为空时,MAX函数会返回null。如果col1列的所有值都为null,MAX函数也会返回null。

D. SELECT CONCAT('max=', MAX(col1)) FROM t1
CONCAT函数在任何一个参数为null时都会返回null。由于MAX(col1)可能返回null(如表为空的情况),因此整个表达式可能返回null。

补充说明:
COUNT函数有一个重要特性:
- COUNT(*)永远返回大于等于0的整数
- COUNT(col1)会统计col1列非null值的数量
- 即使表中没有任何数据,COUNT也会返回0而不是null,这是它与其他聚合函数的重要区别
知识点:数据库、SQL
题友讨论(6)
CONCAT(str1, str2, ..., strN) CONCAT函数会把str1到strN拼接成一个字符串,但是一旦有一个参数是NULL,整个结果就是NULL
CONCAT(str1, str2, ..., strN) CONCAT函数会把str1到strN拼接成一个字符串,但是一旦有一个参数是NULL,整个结果就是NULL
5 回复
发布于 04-21 17:02 湖北 来自Android客户端
mark
mark
点赞 回复
发布于 06-24 00:38 北京 来自Android客户端
0
点赞 回复
发布于 昨天 10:49 北京
0
其他如果行为null则返回null,count计数不会返回null
其他如果行为null则返回null,count计数不会返回null
1 回复
发布于 2024-12-04 09:41 江苏 来自Android客户端
B选项和D选项应该是一样的结果的。
B选项和D选项应该是一样的结果的。
点赞 回复
发布于 05-22 11:06 河南 来自Android客户端
如果该列全为null,count会返回0
如果该列全为null,count会返回0
点赞 回复
发布于 01-20 10:20 香港
收起
单选题
数据库
8.

E-R 图是数据库设计的工具之一,它适用于建立数据库的( )

A
需求模型
B
概念模型
C
逻辑模型
D
物理模型
正确答案:B
你的答案:未作答
官方解析:
E-R图(实体联系图)是用于数据库概念模型设计的有效工具。B选项"概念模型"是正确答案,因为概念模型主要关注系统的整体数据结构和业务规则,而不涉及具体的实现细节。E-R图通过实体、属性、关系等元素,直观地表达了现实世界中的事物及其联系,这正是概念建模的核心任务。

分析其他选项:
A错误:需求模型是在概念模型之前的阶段,主要用于收集和分析用户需求,E-R图并不适用于此阶段。

C错误:逻辑模型是将概念模型转换为特定数据模型(如关系模型)的过程,此时已经不再使用E-R图,而是使用如表结构等其他表示方法。

D错误:物理模型涉及数据库的具体实现,包括存储结构、访问方法等细节,这个阶段同样不使用E-R图。

整个数据库设计过程是从需求分析→概念设计→逻辑设计→物理设计,E-R图主要用于概念设计阶段。
知识点:数据库
题友讨论(6)
3 回复
发布于 2017-08-27 15:34
需求模型:数据流程图 
概念模型:E-R图 
逻辑模型:UML类图
需求模型:数据流程图 
概念模型:E-R图 
逻辑模型:UML类图
31 回复
发布于 2018-12-13 20:11
需求模型:数据流程图 概念模型:E-R图 逻辑模型:UML类图
需求模型:数据流程图 概念模型:E-R图 逻辑模型:UML类图
6 回复
发布于 2018-09-18 23:52
需求模型:数据流程图
概念模型: E-R图
逻辑模型:UML类图
需求模型:数据流程图
概念模型: E-R图
逻辑模型:UML类图
3 回复
发布于 2019-08-28 15:03
需求模型:数据流程图 
概念模型:E-R图 
逻辑模型:UML类图
需求模型:数据流程图 
概念模型:E-R图 
逻辑模型:UML类图
2 回复
发布于 2022-04-28 21:22
需求模型:数据流程图 概念模型:E-R 逻辑模型:UML
需求模型:数据流程图 概念模型:E-R 逻辑模型:UML
点赞 回复
发布于 2021-09-29 01:35 来自Android客户端
收起
单选题
Java
9.
以下程序运行的结果为()
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
public class Example extends Thread{
     @Override
     public void run(){
        try{
             Thread.sleep(1000);
             }catch (InterruptedException e){
             e.printStackTrace();
             }
             System.out.print("run");
     }
     public static void main(String[] args){
             Example example=new Example();
             example.run();
             System.out.print("main");
     }
}
A
run main
B
main run
C
main
D
run
正确答案:A
你的答案:未作答
官方解析:
这道题目考察了Java中线程的基本概念和方法调用。

在该程序中,虽然Example类继承了Thread类,但是在main方法中直接调用example.run()方法,这是普通的方法调用,而不是启动新线程。所以程序会按照顺序执行:

1. 首先执行run方法
2. run方法中休眠1秒(Thread.sleep(1000))
3. 输出"run"
4. 然后继续执行main方法中的输出语句,打印"main"

因此最终输出结果为"run main",A选项正确。

分析其他选项:
B错误:输出顺序不是"main run",因为是普通方法调用而非新线程
C错误:缺少了"run"的输出
D错误:缺少了"main"的输出

关键点在于:如果想要真正启动新线程,应该调用example.start()方法而不是example.run()。使用run()方法只是普通的方法调用,会在当前线程中顺序执行,而不会创建新的线程。

如果把代码改成example.start(),则会启动新线程,输出结果可能是"main run"或"run main",取决于线程调度。
知识点:2015、Java、Java工程师、JavaSE
题友讨论(110)
public class ExampleForThread extends Thread {

@Override
public void run() {
try {
Thread.sleep(1000);
} catch (InterruptedException e) {
e.printStackTrace();
}
System.out.println("run");
}

public static void main(String[] args) {
ExampleForThread ex = new ExampleForThread();
ex.start();
System.out.println("main");
}
}

若执行start()方法,则运行的结果为:main run.
public class ExampleForThread extends Thread {

@Override
public void run() {
try {
Thread.sleep(1000);
} catch (InterruptedException e) {
e.printStackTrace();
}
System.out.println("run");
}

public static void main(String[] args) {
ExampleForThread ex = new ExampleForThread();
ex.start();
System.out.println("main");
}
}

若执行start()方法,则运行的结果为:main run.
点赞 回复
发布于 2016-09-23 09:59
我在eclipse.exe neon Tomcat 7下为什么输出的结果为:main
我在eclipse.exe neon Tomcat 7下为什么输出的结果为:main
点赞 回复
发布于 2018-08-09 09:19
0
想问下start以后,该线程处于就绪状态,应该不知道它和当前主线程的运行顺序吧,谢谢
想问下start以后,该线程处于就绪状态,应该不知道它和当前主线程的运行顺序吧,谢谢
点赞 回复
发布于 2018-09-01 12:21
0
展开1条回复
没人考虑如何sleep(1000)抛出异常还会打印异常信息么?
没人考虑如何sleep(1000)抛出异常还会打印异常信息么?
点赞 回复
发布于 2016-04-05 02:58
运行这段代码不会抛出异常
运行这段代码不会抛出异常
点赞 回复
发布于 2016-09-17 22:27
0
直接调用的run,不算使用多线程
直接调用的run,不算使用多线程
点赞 回复
发布于 2019-10-02 20:17
看清楚了,调用的是run方法 按顺序执行
看清楚了,调用的是run方法 按顺序执行
点赞 回复
发布于 2019-09-01 16:20
我不理解的是 从try进去哪里错了 为什么要进catch里面
我不理解的是 从try进去哪里错了 为什么要进catch里面
点赞 回复
发布于 2018-04-27 00:31
这里没有进入catch里面吧
这里没有进入catch里面吧
点赞 回复
发布于 2018-04-27 09:13
0
启动线程必须通过调用start()方法,将第13行代码改成example.start(),得出的结果即为main run。
启动线程必须通过调用start()方法,将第13行代码改成example.start(),得出的结果即为main run。
点赞 回复
发布于 2017-08-22 22:58
调用run方法并不会启动子线程,而是直接当作普通函数调用,因此在执行run的时候,遇到Thread.sleep(1000)导致的是main线程休眠1s,因此效果是运行后,在1s后控制台输出“runmain"
调用run方法并不会启动子线程,而是直接当作普通函数调用,因此在执行run的时候,遇到Thread.sleep(1000)导致的是main线程休眠1s,因此效果是运行后,在1s后控制台输出“runmain"
44 回复
发布于 2016-07-14 21:12
public class TestThread_multi extends Thread{
@Override
public void run(){
try{
Thread.sleep(1000);
}catch (InterruptedException e){
e.printStackTrace();
}
System.out.print("run");
}
public static void main(String[] args){
/**
* 两种方式不同,newThread的话会使两个线程进行;
* 如果同一个对象中,只是进行了子函数的执行,在同一个线程中,顺序不会有交叉
*/
//1:run main
TestThread_multi ex=new TestThread_multi();
ex.run();
//2:main run
new Thread(
new Runnable(){
public void run(){
   try{
        Thread.sleep(10000);
        }catch (InterruptedException e){
        e.printStackTrace();
        }
        System.out.print("run");
}
}
).start();
System.out.print("main");
}
}
这个例子,已经注解了情况
public class TestThread_multi extends Thread{
@Override
public void run(){
try{
Thread.sleep(1000);
}catch (InterruptedException e){
e.printStackTrace();
}
System.out.print("run");
}
public static void main(String[] args){
/**
* 两种方式不同,newThread的话会使两个线程进行;
* 如果同一个对象中,只是进行了子函数的执行,在同一个线程中,顺序不会有交叉
*/
//1:run main
TestThread_multi ex=new TestThread_multi();
ex.run();
//2:main run
new Thread(
new Runnable(){
public void run(){
   try{
        Thread.sleep(10000);
        }catch (InterruptedException e){
        e.printStackTrace();
        }
        System.out.print("run");
}
}
).start();
System.out.print("main");
}
}
这个例子,已经注解了情况
30 回复
发布于 2015-07-17 22:09
解释详细
解释详细
点赞 回复
发布于 2016-08-02 13:15
0
可以
可以
点赞 回复
发布于 2016-11-06 08:15
0
展开2条回复
话说哪来的空格  
话说哪来的空格  
7 回复
发布于 2015-08-19 17:13
高人啊
高人啊
点赞 回复
发布于 2016-08-11 20:15
0
高人!!!
高人!!!
点赞 回复
发布于 2016-09-05 23:43
0
Java实现多线程有两种方式,第一是实现Thread类。步骤:

1 继承Thread  类  
2 重写run方法
3 创建多个实例(即线程)
4 启动  调用start方法

补充:run()只是一个普通的方法,没有启动线程的作用,重写这个方法的原因run()方法用来包含那些被线程执行的代码,一般来说被线程执行的代码都是比较耗时的,start():首先启动线程,然后再由jmv去调用该线程的run()方法,同一个线程不能被调用多次

B:实现Runnable接口
实现步骤:
a 创建一个新类并实现Runnable接口
b 重写run()方法
c 创建新类的一个实例
d 创建多个Thread实例,其参数为c中创建的实例对象
e 启动线程
补充:为什么要有这个方法来实现多线程:
1因为如果一个类已经有了一个父类,那么该类就不可能在继承Thread的类,而接口可以继承多个。
2 这个接口定义的成员属性是共享的(相当于static修饰)
Java实现多线程有两种方式,第一是实现Thread类。步骤:

1 继承Thread  类  
2 重写run方法
3 创建多个实例(即线程)
4 启动  调用start方法

补充:run()只是一个普通的方法,没有启动线程的作用,重写这个方法的原因run()方法用来包含那些被线程执行的代码,一般来说被线程执行的代码都是比较耗时的,start():首先启动线程,然后再由jmv去调用该线程的run()方法,同一个线程不能被调用多次

B:实现Runnable接口
实现步骤:
a 创建一个新类并实现Runnable接口
b 重写run()方法
c 创建新类的一个实例
d 创建多个Thread实例,其参数为c中创建的实例对象
e 启动线程
补充:为什么要有这个方法来实现多线程:
1因为如果一个类已经有了一个父类,那么该类就不可能在继承Thread的类,而接口可以继承多个。
2 这个接口定义的成员属性是共享的(相当于static修饰)
5 回复
发布于 2016-08-19 15:53
额....不是四种方法?
额....不是四种方法?
点赞 回复
发布于 2017-05-25 19:22
0
收起
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
单选题
数据库
10.

设有事务T1T2,其并发操作顺序如下所示(其中 ①②③④⑤ 表示时间从前到后的顺序)

        T1                                                        T2

READ A

A =A*2

WRITE A

                                                            ④ READ A

ROLLBACK

该并发操作带来的问题是( )。

A
不一致分析
B
丢失更新
C
读了“脏数据”
D
写错误
正确答案:C
你的答案:未作答
官方解析:
本题考察数据库事务并发操作中的脏读问题。T2事务读取了T1事务未提交的数据,而T1后来进行了回滚操作,这种情况下T2读到的就是"脏数据",所以C选项是正确答案。

让我们来分析整个执行过程:
1. T1读取A的值
2. T1将A值翻倍
3. T1写入新的A值(此时未提交)
4. T2读取了T1修改后但未提交的A值
5. T1进行回滚操作,A值恢复到原始状态

T2读取到的A值是T1修改后的值,但由于T1最终回滚了,这个值是无效的,属于"脏数据"。这就是典型的脏读问题。

分析其他选项:
A错误:不一致分析指的是事务T1读取一个数据集合两次,两次读取的结果不一致,本题中并未体现这种情况。

B错误:丢失更新是指两个事务同时更新同一数据,后面的更新覆盖了前面的更新。本题中只有T1进行了更新操作。

D错误:写错误是指两个事务同时写入同一数据导致的错误。本题中只有T1进行了写操作。
知识点:数据库、SQL+MySQL
题友讨论(4)
读取了其他事务未提交的数据(事务回滚了)
读取了其他事务未提交的数据(事务回滚了)
23 回复
发布于 2017-08-23 09:53
事务T1还没提交的时候,事务T2就能读取事务T1修改的数据吗?
事务T1还没提交的时候,事务T2就能读取事务T1修改的数据吗?
点赞 回复
发布于 2021-07-12 12:47
0
读未提交级别读到的就是脏数据
读未提交级别读到的就是脏数据
9 回复
发布于 2021-07-18 08:04 来自iOS客户端
读未提交级别读到的就是脏数据
读未提交级别读到的就是脏数据
2 回复
发布于 2022-02-17 15:19 来自Android客户端
收起
单选题
Java
11.
如果一个list初始化为{5,3,1},执行以下代码后,其结果为()?
1
2
3
nums.add(6);
nums.add(0,4);
nums.remove(1);
A
[5, 3, 1, 6]
B
[4, 3, 1, 6]
C
[4, 3, 6]
D
[5, 3, 6]
正确答案:B
你的答案:未作答
官方解析:
让我们逐步分析这道关于List操作的题目。

这段代码的执行过程如下:

1. 初始状态: list = {5, 3, 1}

2. nums.add(6)
执行后: {5, 3, 1, 6} (在列表末尾添加6)

3. nums.add(0,4)
执行后: {4, 5, 3, 1, 6} (在索引0的位置插入4)

4. nums.remove(1)
执行后: {4, 3, 1, 6} (删除索引1位置的元素5)

因此B选项[4, 3, 1, 6]是正确答案。

分析其他选项:

A选项[5, 3, 1, 6]错误:
这个结果只执行了第一步add(6)的操作,没有考虑后续的add(0,4)和remove(1)操作。

C选项[4, 3, 6]错误:
这个结果缺少了数字1,实际上1并没有被删除。

D选项[5, 3, 6]错误:
这个结果既没有反映出在位置0插入4的操作,也没有正确处理remove操作。

这道题目主要考察了List的基本操作:
- add(element):在列表末尾添加元素
- add(index, element):在指定位置插入元素
- remove(index):删除指定位置的元素
知识点:Java、安卓工程师、2018、JavaSE
题友讨论(76)
list{5,3,1}
nums.add(6); //往后边加一个6,{5,3,1,6}
nums.add(0,4);//往下标为0的数加一个4,{4,5,3,1,6} nums.remove(1); // 移除下标为1 的元素,{4,3,1,6}
list{5,3,1}
nums.add(6); //往后边加一个6,{5,3,1,6}
nums.add(0,4);//往下标为0的数加一个4,{4,5,3,1,6}
nums.remove(1); // 移除下标为1 的元素,{4,3,1,6}
360 回复
发布于 2019-08-22 11:46
1 回复
发布于 2021-09-29 14:56 来自Android客户端
0
针不戳!!!
针不戳!!!
1 回复
发布于 2021-11-29 23:37 来自Android客户端
0
展开7条回复
好深的套路、不自觉的就选C的有没有😂😂😂😂
好深的套路、不自觉的就选C的有没有😂😂😂😂
37 回复
发布于 2019-08-22 22:57
是啊,一不留神就选错了O(∩_∩)O哈哈~
是啊,一不留神就选错了O(∩_∩)O哈哈~
点赞 回复
发布于 2019-12-08 19:46
0
路过
路过
点赞 回复
发布于 2020-07-03 13:25
0
展开17条回复

{5,3,1}

nums.add(6);       //[5, 3, 1, 6]     
nums.add(0,4);     //[4, 5, 3, 1, 6] 
nums.remove(1);    //[4, 3, 1, 6]

{5,3,1}

nums.add(6);       //[5, 3, 1, 6]     
nums.add(0,4);     //[4, 5, 3, 1, 6] 
nums.remove(1);    //[4, 3, 1, 6]
32 回复
发布于 2019-08-18 21:03
remove(int index) 也有remove(对象) ,当传递new Integer(1)时才会删除1这个元素
remove(int index) 也有remove(对象) ,当传递new Integer(1)时才会删除1这个元素
26 回复
发布于 2019-12-31 10:27
区分的好
区分的好
点赞 回复
发布于 2021-03-29 12:44 来自Android客户端
0
不错
不错
点赞 回复
发布于 2023-10-08 15:25 广东
0
nums.add(6)是在最后追加6
nums.add(0,4)是在下标为0的位置添加4 也就是第一个位置
rnums.remove(1)是移除下标为1的元素
nums.add(6)是在最后追加6
nums.add(0,4)是在下标为0的位置添加4 也就是第一个位置
rnums.remove(1)是移除下标为1的元素
22 回复
发布于 2019-08-21 13:32
变量和类型 方法 描述
boolean add(E e) 将指定元素追加此列表的末尾
void add(int index, E element) 将指定元素插入此列表的指定位置
E remove(int index) 删除此列表指定位置的元素
boolean remove(Object o) 删除指定元素的第一个匹配项
变量和类型 方法 描述
boolean add(E e) 将指定元素追加此列表的末尾
void add(int index, E element) 将指定元素插入此列表的指定位置
E remove(int index) 删除此列表指定位置的元素
boolean remove(Object o) 删除指定元素的第一个匹配项
11 回复
发布于 2021-04-23 08:07
很好
很好
点赞 回复
发布于 2021-12-24 09:04 来自Android客户端
0
list的add方法
nums.add(a);  //尾插在集合后面
nums.add(m, b);  //在指定下标m处插入b,原m及m以后的元素下标加一
nums.remove(c); // 移除指定下标c处的元素
list的add方法
nums.add(a);  //尾插在集合后面
nums.add(m, b);  //在指定下标m处插入b,原m及m以后的元素下标加一
nums.remove(c); // 移除指定下标c处的元素
4 回复
发布于 2022-02-24 20:23


4 回复
发布于 2019-08-17 19:00
5,3,1
nums.add(6);  5,3,1,6
nums.add(0,4); 4,5,3,1,6
nums.remove(1); 4,3,1,6
和我一样选错两次的有没有,不长记性呀

5,3,1
nums.add(6);  5,3,1,6
nums.add(0,4); 4,5,3,1,6
nums.remove(1); 4,3,1,6
和我一样选错两次的有没有,不长记性呀

3 回复
发布于 2022-04-04 15:34
有没有看c半天在想,3怎么还在我1去哪了,强行选c的
有没有看c半天在想,3怎么还在我1去哪了,强行选c的
3 回复
发布于 2019-11-16 22:01
是的,就是这种想法
是的,就是这种想法
点赞 回复
发布于 2020-09-09 16:51
0
收起
  • 1
  • 2
  • 3
  • 4
  • 5
单选题
Java
12.

对于Java中异常的描述正确的是( )

A
用throws定义了方法可能抛出的异常,那么调用此方法时一定会抛出此异常。
B
如果try块中没有抛出异常,finally块中的语句将不会被执行。
C
抛出异常意味着程序发生运行时错误,需要调试修改
D
Java中的非检测(unchecked)异常可能来自RuntimeException类或其子类。
正确答案:D
你的答案:未作答
官方解析:
D选项正确,因为Java中的非检测异常(unchecked exception)确实是RuntimeException类及其子类。这些异常不需要在方法声明中显式使用throws关键字声明,也不强制要求必须捕获处理。

分析其他选项:

A错误:使用throws声明的异常并不意味着方法一定会抛出该异常,它只是表明方法可能会抛出这些异常。异常的实际抛出取决于方法的执行过程。

B错误:finally块中的代码总是会被执行,无论try块是否抛出异常。这是finally块的重要特性,用于确保一些清理工作一定能够执行。

C错误:并非所有异常都意味着程序存在错误需要调试修改。有些异常是正常业务流程的一部分,比如用户输入验证失败等情况。

补充说明:Java的异常分为两大类:
1. 检测异常(checked exception):必须显式处理的异常
2. 非检测异常(unchecked exception):RuntimeException及其子类,这类异常不强制要求显式处理

所以D选项准确描述了Java中非检测异常的特点。
知识点:Java
题友讨论(84)
Exception(异常)
是程序本身可以处理的异常。主要包含RuntimeException等运行时异常和IOException,SQLException等非运行时异常。
运行时异常 包括:都是RuntimeException类及其子类异常,如NullPointerException(空指针异常)、IndexOutOfBoundsException(下标越界异常)等,这些异常是不检查异常,程序中可以选择捕获处理,也可以不处理。这些异常一般是由程序逻辑错误引起的,程序应该从逻辑角度尽可能避免这类异常的发生。
运行时异常的特点是Java编译器不会检查它,也就是说,当程序中可能出现这类异常,即使没有用try-catch语句捕获它,也没有用throws子句声明抛出它,也会编译通过。
非运行时异常(编译异常) 包括:RuntimeException以外的异常,类型上都属于Exception类及其子类。从程序语法角度讲是必须进行处理的异常,如果不处理,程序就不能编译通过。如IOException、SQLException等以及用户自定义的Exception异常,一般情况下不自定义检查异常
Exception(异常)
是程序本身可以处理的异常。主要包含RuntimeException等运行时异常和IOException,SQLException等非运行时异常。
运行时异常 包括:都是RuntimeException类及其子类异常,如NullPointerException(空指针异常)、IndexOutOfBoundsException(下标越界异常)等,这些异常是不检查异常,程序中可以选择捕获处理,也可以不处理。这些异常一般是由程序逻辑错误引起的,程序应该从逻辑角度尽可能避免这类异常的发生。
运行时异常的特点是Java编译器不会检查它,也就是说,当程序中可能出现这类异常,即使没有用try-catch语句捕获它,也没有用throws子句声明抛出它,也会编译通过。
非运行时异常(编译异常) 包括:RuntimeException以外的异常,类型上都属于Exception类及其子类。从程序语法角度讲是必须进行处理的异常,如果不处理,程序就不能编译通过。如IOException、SQLException等以及用户自定义的Exception异常,一般情况下不自定义检查异常
108 回复
发布于 2017-05-06 22:18
楼主真好看
楼主真好看
1 回复
发布于 2018-06-29 10:11
0
非运行时异常必须处理的意思是必须try,catch。顶楼主。
非运行时异常必须处理的意思是必须try,catch。顶楼主。
2 回复
发布于 2018-08-15 11:36
0
展开5条回复

A错 在调用此方法的时候 也可以再次申明以将异常交由更高一级处理。
B错 finally块中的语句一定会被执行。除非catch块中有System.exit(0)
C错 抛出异常不一定是运行时异常,也有可能是编译时异常。
D对 运行时异常的特点是Java编译器不会检查它。

A错 在调用此方法的时候 也可以再次申明以将异常交由更高一级处理。
B错 finally块中的语句一定会被执行。除非catch块中有System.exit(0)
C错 抛出异常不一定是运行时异常,也有可能是编译时异常。
D对 运行时异常的特点是Java编译器不会检查它。

107 回复
发布于 2018-04-09 14:06
A错在 如果方法只在方法头 throws Exception{},而方法里面没有实际的 异常对象 (引起异常的原因,或throw new Exception() ),也就是没有异常,何来抛出(抛什么呢)。 就不会抛出(即给上一级处理)。抛出(声明(throws))==给上一级,&ldquo;前提条件是要有异常,不然没任何效果!!&rdquo;
A错在 如果方法只在方法头 throws Exception{},而方法里面没有实际的 异常对象 (引起异常的原因,或throw new Exception() ),也就是没有异常,何来抛出(抛什么呢)。 就不会抛出(即给上一级处理)。抛出(声明(throws))==给上一级,“前提条件是要有异常,不然没任何效果!!”
20 回复
发布于 2019-03-24 21:43
0
也是,要有异常才能抛出异常
也是,要有异常才能抛出异常
1 回复
发布于 2020-02-10 16:30
0
展开3条回复
D 选项也不对吧  可不检测(unchecked)异常也可能来自Error吧。
D 选项也不对吧  可不检测(unchecked)异常也可能来自Error吧。
41 回复
发布于 2017-05-04 21:27
Error需要检测
Error需要检测
点赞 回复
发布于 2017-05-06 19:36
0
有道理,Java程序没有处理Error的能力,所以不用检测
有道理,Java程序没有处理Error的能力,所以不用检测
点赞 回复
发布于 2017-05-06 21:07
0
展开10条回复
java提供了两种异常错误的异常类,分别为ERROR和EXCEPTION,错误和异常,他们的父类是Throwable.
error表示程序在运行期间出现了严重的错误,并且该错误是不可恢复的。
exception表示可恢复的异常,是编译器可以捕捉到的。分两类:检查异常(checked exception)和运行时异常(runtime exception)
个人觉得本题的可不检测是针对检查来说的也就是运行时异常。
java提供了两种异常错误的异常类,分别为ERROR和EXCEPTION,错误和异常,他们的父类是Throwable.
error表示程序在运行期间出现了严重的错误,并且该错误是不可恢复的。
exception表示可恢复的异常,是编译器可以捕捉到的。分两类:检查异常(checked exception)和运行时异常(runtime exception)
个人觉得本题的可不检测是针对检查来说的也就是运行时异常。
20 回复
发布于 2017-08-19 14:55

借鉴某同志的图


借鉴某同志的图

8 回复
发布于 2018-06-03 16:25
mark-异常
mark-异常
点赞 回复
发布于 2023-03-09 23:09 广东 来自Android客户端
0
A、用throws定义了方法可能抛出的异常,但是调用此方法不一定会抛出异常,需要去try{}catch{}    throws的异常
B、不管try块中有没有抛出异常,finally块中的语句都会被执行。 C、抛出异常意味着程序发生(“运行时”)错误,不一定是运行时才发生错误,也可以是编译时发生的
D、check翻译中文是“检查”的意思,un开头表否定,表示非检查性异常
A、用throws定义了方法可能抛出的异常,但是调用此方法不一定会抛出异常,需要去try{}catch{}    throws的异常
B、不管try块中有没有抛出异常,finally块中的语句都会被执行。
C、
抛出异常意味着程序发生(“运行时”)错误,不一定是运行时才发生错误,也可以是编译时发生的
D、check翻译中文是“检查”的意思,un开头表否定,表示非检查性异常
4 回复
发布于 2018-11-19 22:03
A选项哪里错了?   
A选项哪里错了?   
4 回复
发布于 2017-06-12 10:24
throws一般用在方法上 表示此方法可能发生的异常 例如利用流读取文件信息 如果没有此文件就会报FileNotFoundException 但是要是有就不会报异常
throws一般用在方法上 表示此方法可能发生的异常 例如利用流读取文件信息 如果没有此文件就会报FileNotFoundException 但是要是有就不会报异常
2 回复
发布于 2017-06-15 15:18
0
处理完善就不会抛异常啊,只是可能会抛这个异常。
处理完善就不会抛异常啊,只是可能会抛这个异常。
1 回复
发布于 2017-07-21 10:12
0
展开3条回复
认真解析
A.throws只是声明这个方法中可能抛出的异常,如果抛出异常它将会交给上一级处理。既然是可能,那它就也可能没有抛出异常
B.final代码块一定执行(千万别拿关闭jvm和停电杠我。。。)
C.异常有编译时异常和运行时异常,这都是有可能的
D.非检测异常说明不是在编译检测时出的异常,那就只剩下运行时异常了,也就是
RuntimeException类或其子类。
认真解析
A.throws只是声明这个方法中可能抛出的异常,如果抛出异常它将会交给上一级处理。既然是可能,那它就也可能没有抛出异常
B.final代码块一定执行(千万别拿关闭jvm和停电杠我。。。)
C.异常有编译时异常和运行时异常,这都是有可能的
D.非检测异常说明不是在编译检测时出的异常,那就只剩下运行时异常了,也就是
RuntimeException类或其子类。
3 回复
发布于 2021-12-09 10:56
不少人选A,其实不一定,因为你可以继续抛。
不少人选A,其实不一定,因为你可以继续抛。
3 回复
发布于 2017-07-07 22:23
然而并不是这么理解的,方法的异常声明可以声明但实际不抛出。在Thinking in Java里面有提到过,在定义抽象类和接口声明异常,这样在派生类和实现中就可以提醒使用者。
然而并不是这么理解的,方法的异常声明可以声明但实际不抛出。在Thinking in Java里面有提到过,在定义抽象类和接口声明异常,这样在派生类和实现中就可以提醒使用者。
1 回复
发布于 2018-05-09 17:56
0
已检查的异常:编译时提示需要try 或 throw
未检查的异常:
            举例: int i = 18;
                        i = i / 0;
此时,系统没有检测,但是最后输出报异常,这就属于未检查异常
所有异常的父类是Throwable ,在父类下有子类Error 和 Exception ,在java中,只有Error 与 RuntimeException 属于不检查异常
已检查的异常:编译时提示需要try 或 throw
未检查的异常:
            举例: int i = 18;
                        i = i / 0;
此时,系统没有检测,但是最后输出报异常,这就属于未检查异常
所有异常的父类是Throwable ,在父类下有子类Error 和 Exception ,在java中,只有Error 与 RuntimeException 属于不检查异常
2 回复
发布于 2021-09-18 18:05
收起
  • 1
  • 2
  • 3
  • 4
  • 5
单选题
数据库
13.
在关系数据库设计中,关系模式是用来记录用户数据的(  )。
A
二维表
B
视图
C
属性
D
实体
正确答案:A
你的答案:未作答
官方解析:

解析:【解析】在关系数据库中用关系模型来表示数据结构,表示为一个二维表,一个关系就是一个二维表。故本题答案为 A 选项。

知识点:数据库
题友讨论(2)
关系模型是指用二维表的形式表示实体和实体间联系的数据模型。
关系模型是指用二维表的形式表示实体和实体间联系的数据模型。
1 回复
发布于 2020-07-03 14:09

解析:【解析】在关系数据库中用关系模型来表示数据结构,表示为一个二维表,一个关系就是一个二维表。故本题答案为 A 选项。

解析:【解析】在关系数据库中用关系模型来表示数据结构,表示为一个二维表,一个关系就是一个二维表。故本题答案为 A 选项。

17 回复
发布于 2017-04-28 13:34
收起
单选题
Java
14.
下面 Java 代码的运行结果为()
1
2
3
4
5
6
7
8
public static void main(String[] args) {
    int[] arr = {2345};
    int sum = 0;
    for (int i : arr) {
        sum += i;
    }
    System.out.println(sum / arr.length);
}
A
3
B
3.5
C
4
D
4.5
正确答案:A
你的答案:未作答
官方解析:
这段代码使用增强型for循环计算整型数组元素的和,然后除以数组长度求平均值。结果为3,因为这是整数除法运算。

具体分析:
1. 数组arr中的元素是{2,3,4,5}
2. 求和过程: sum = 2 + 3 + 4 + 5 = 14
3. 数组长度arr.length = 4
4. 最终计算: 14 / 4 = 3(整数除法)

选项分析:
A正确:因为在Java中,两个整数相除的结果会自动舍去小数部分,所以14/4=3
B错误:3.5是数学上的精确结果,但由于使用的是整数除法,所以不会得到3.5
C错误:4是错误的计算结果,实际结果应该是3
D错误:4.5远大于实际结果3

知识点:
1. Java中整数除法会舍去小数部分
2. 如果需要得到精确的小数结果,至少需要有一个操作数是浮点数类型
3. 可以通过强制类型转换实现,如(double)sum/arr.length
知识点:Java
题友讨论(1)
int类型,小数部分被舍弃。3.5变为3
int类型,小数部分被舍弃。3.5变为3
2 回复
发布于 05-14 19:18 广东 来自Android客户端
收起
单选题
Java
15.

列表(List)和集合(Set)下面说法正确的是?  ( )


A
Set中至多只能有一个空元素
B
List中至多只能有一个空元素
C
List和Set都可以包含重复元素的有序集合
D
List和Set都是有序集合
正确答案:A
你的答案:未作答
官方解析:
Set和List都是Java集合框架中的重要接口,它们有着不同的特性。A选项正确,因为Set作为不允许重复元素的集合,对于空元素(null)也遵循这一规则,因此Set中最多只能包含一个null元素。

分析其他选项:

B错误:List允许包含重复元素,这包括多个null元素。因此List中可以有多个null元素,而不是"至多只能有一个"。

C错误:这个说法有两处错误:
1. Set不允许包含重复元素,这是Set接口的基本特征
2. 并非所有Set都是有序的,比如HashSet就是无序的

D错误:并非所有Set都是有序集合。Set接口的实现类中:
- HashSet是无序的
- TreeSet是有序的
- LinkedHashSet是按插入顺序排序的
而List接口的实现类都是有序的,按照元素的插入顺序维护顺序。所以说"List和Set都是有序集合"这个说法是错误的。

补充说明:理解Set和List的基本特性对于选择合适的集合类型非常重要,这直接影响到程序的正确性和性能。
知识点:Java
题友讨论(77)
Set 不能有重复的元素,且是无序的,要有空值也就只能有一个。因为它不允许重复。 L ist 可以有重复元素,且是有序的,要有空值也可以有多个,因为它可重复
Set 不能有重复的元素,且是无序的,要有空值也就只能有一个。因为它不允许重复。 L ist 可以有重复元素,且是有序的,要有空值也可以有多个,因为它可重复
280 回复
发布于 2017-06-12 23:12
O(&cap;_&cap;)O谢谢
O(∩_∩)O谢谢
点赞 回复
发布于 2017-07-04 10:22
0
聪明
聪明
点赞 回复
发布于 2018-04-10 12:30
0
展开7条回复
因为set中不能有财富元素,且是无序的,所以即使有空值也只能有一个。
因为set中不能有财富元素,且是无序的,所以即使有空值也只能有一个。
1 回复
发布于 2021-06-24 17:35
同上
同上
点赞 回复
发布于 2017-12-19 23:04
java里面讲的有序无序,指的是你按照顺序存进去数据,然后再按照顺序取出来,两者是一样的。比如List(0)我放的是“a”,那么我list.get(0)取出来也是“a”。并不代表我存了打乱顺序存1到10十个数,它会自己给按照升序或者降序给你排好序。
java里面讲的有序无序,指的是你按照顺序存进去数据,然后再按照顺序取出来,两者是一样的。比如List(0)我放的是“a”,那么我list.get(0)取出来也是“a”。并不代表我存了打乱顺序存1到10十个数,它会自己给按照升序或者降序给你排好序。
74 回复
发布于 2017-10-18 15:57
哈哈。我正忘了这个
哈哈。我正忘了这个
点赞 回复
发布于 2018-09-17 11:59
0
42 回复
发布于 2019-01-11 10:46
TreeSet 有序啊
TreeSet 有序啊
点赞 回复
发布于 2020-05-19 22:34
0
此有序非彼有序
此有序非彼有序
点赞 回复
发布于 2020-08-03 20:45 来自iOS客户端
0
展开1条回复
Set是去重,只允许最多有一个空元素
Set是去重,只允许最多有一个空元素
29 回复
发布于 2017-05-25 16:53
set去重 一句话简单明了
set去重 一句话简单明了
1 回复
发布于 2017-09-07 20:33
0
言简意赅!
言简意赅!
点赞 回复
发布于 2022-02-21 10:19
0
list有序有重;set无序无重
list有序有重;set无序无重
16 回复
发布于 2019-02-13 14:30
Set: HashSet,LinkedHashSet,TreeSet,EnumSet(后三个有序)
List: ArrayList,LinkedList,Stack,Vector(全部有序)
Queue:LinkedBlockingQueue,ArraysBlockingQueue(全部有序)
Map: HashMap,TreeMap,LinkedHashMap,EnumMap(前三有序),ConcurrentHashMap,IdentityHashMap
Set: HashSet,LinkedHashSet,TreeSet,EnumSet(后三个有序)
List: ArrayList,LinkedList,Stack,Vector(全部有序)
Queue:LinkedBlockingQueue,ArraysBlockingQueue(全部有序)
Map: HashMap,TreeMap,LinkedHashMap,EnumMap(前三有序),ConcurrentHashMap,IdentityHashMap
12 回复
发布于 2017-11-13 15:44
HashMap有序?确定不是在开玩笑
HashMap有序?确定不是在开玩笑
点赞 回复
发布于 2020-08-25 09:00 来自Android客户端
0
好好看
好好看
点赞 回复
发布于 2020-12-02 23:58 来自iOS客户端
0
展开3条回复
java中的有序,指的是是否保持传入时的顺序。List保存传入的顺序,是有序的,它不要求去重复,故而空值在其中也可以有多个。
而Set是不保留存入顺序的,即无须,它不允许重复,所有值在其中都只能有一个(空值同理)
java中的有序,指的是是否保持传入时的顺序。List保存传入的顺序,是有序的,它不要求去重复,故而空值在其中也可以有多个。
而Set是不保留存入顺序的,即无须,它不允许重复,所有值在其中都只能有一个(空值同理)
4 回复
发布于 2018-02-28 17:29
set 不包含满足e1.equals(e2)的元素对e1和e2,并且最多包含一个 null 元素。正如其名称所暗示的,此接口模仿了数学上的 set 抽象。
set 不包含满足e1.equals(e2)的元素对e1和e2,并且最多包含一个 null 元素。正如其名称所暗示的,此接口模仿了数学上的 set 抽象。
4 回复
发布于 2017-05-19 23:46
收起
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
单选题
数据库
16.
关系 S 自然联接时,能够把 S 原该舍弃的元组放到结果关系中的操作是 (    )
A
左外连接
B
右外连接
C
外部并
D
外连接
正确答案:D
你的答案:未作答
官方解析:
左外联接以左边关系为参照系,将所有左边关系的元组以及右边关系中满足条件的元组放到结果关系中。
右外联接以右边关系为参照系,将所有右边关系的元组以及左边关系中满足条件的
元组放到结果关系中。
左外联接能够把R中原该舍弃的元组放到结果关系中,但不能把S中原该舍弃的元组放到结果关系中。右外联接能够把S中原该舍弃的元组放到结果关系中,但不能把R中原该舍弃的元组放到结果关系中。
外部并操作的概念是:如果R和S的关系模式不同,实现R与S的并操作所构成的新关系的属性由R和S的所有属性组成(公共属性只取一次),新关系的元组由属于R或属于S的元组所构成,同时元组在新增加的属性上填入空值。
外联接既能够把R中原该舍弃的元组放到结果关系中,又能把S中原该舍弃的元组放到结果关系中。
知识点:数据库
题友讨论(7)
这题是个坑啊!选左外连接去了,其实是外连接。
这题是个坑啊!选左外连接去了,其实是外连接。
1 回复
发布于 2021-05-09 09:49
1、内联接(典型的联接运算,使用像 =  或 <> 之类的比较运算符)。包括相等联接和自然联接。     
内联接使用比较运算符根据每个表共有的列的值匹配两个表中的行。例如,检索 students和courses表中学生标识号相同的所有行。   
    
2、外联接。
外联接可以是左向外联接、右向外联接或完整外部联接。     
在 FROM子句中指定外联接时,可以由下列几组关键字中的一组指定:     
1)LEFT  JOIN或LEFT OUTER JOIN     
左向外联接的结果集包括  LEFT OUTER子句中指定的左表的所有行,而不仅仅是联接列所匹配的行。如果左表的某行在右表中没有匹配行,则在相关联的结果集行中右表的所有选择列表列均为空值。       
2)RIGHT  JOIN 或 RIGHT  OUTER  JOIN     
右向外联接是左向外联接的反向联接。将返回右表的所有行。如果右表的某行在左表中没有匹配行,则将为左表返回空值。       
3)FULL  JOIN 或 FULL OUTER JOIN
完整外部联接返回左表和右表中的所有行。当某行在另一个表中没有匹配行时,则另一个表的选择列表列包含空值。如果表之间有匹配行,则整个结果集行包含基表的数据值。   

3、交叉联接   
交叉联接返回左表中的所有行,左表中的每一行与右表中的所有行组合。交叉联接也称作笛卡尔积。    
FROM 子句中的表或视图可通过内联接或完整外部联接按任意顺序指定;但是,用左或右向外联接指定表或视图时,表或视图的顺序很重要。有关使用左或右向外联接排列表的更多信息,请参见使用外联接。
1、内联接(典型的联接运算,使用像 =  或 <> 之类的比较运算符)。包括相等联接和自然联接。     
内联接使用比较运算符根据每个表共有的列的值匹配两个表中的行。例如,检索 students和courses表中学生标识号相同的所有行。   
    
2、外联接。
外联接可以是左向外联接、右向外联接或完整外部联接。     
在 FROM子句中指定外联接时,可以由下列几组关键字中的一组指定:     
1)LEFT  JOIN或LEFT OUTER JOIN     
左向外联接的结果集包括  LEFT OUTER子句中指定的左表的所有行,而不仅仅是联接列所匹配的行。如果左表的某行在右表中没有匹配行,则在相关联的结果集行中右表的所有选择列表列均为空值。       
2)RIGHT  JOIN 或 RIGHT  OUTER  JOIN     
右向外联接是左向外联接的反向联接。将返回右表的所有行。如果右表的某行在左表中没有匹配行,则将为左表返回空值。       
3)FULL  JOIN 或 FULL OUTER JOIN
完整外部联接返回左表和右表中的所有行。当某行在另一个表中没有匹配行时,则另一个表的选择列表列包含空值。如果表之间有匹配行,则整个结果集行包含基表的数据值。   

3、交叉联接   
交叉联接返回左表中的所有行,左表中的每一行与右表中的所有行组合。交叉联接也称作笛卡尔积。    
FROM 子句中的表或视图可通过内联接或完整外部联接按任意顺序指定;但是,用左或右向外联接指定表或视图时,表或视图的顺序很重要。有关使用左或右向外联接排列表的更多信息,请参见使用外联接。
21 回复
发布于 2018-03-28 21:16
个人认为,因为不能确定S属于左子句还是右子句,所以不能选择此二项,因此选择外连接。
个人认为,因为不能确定S属于左子句还是右子句,所以不能选择此二项,因此选择外连接。
20 回复
发布于 2019-12-28 22:39
这个答案应该是B把,毕竟只是把S中原该舍弃的元组放到结果关系中。
这个答案应该是B把,毕竟只是把S中原该舍弃的元组放到结果关系中。
4 回复
发布于 2018-09-04 14:46
这题目你要是再详细点说那边那边的话,就好选了,反正我是看的模糊,d选项都包含了a,b。肯定是错的。
这题目你要是再详细点说那边那边的话,就好选了,反正我是看的模糊,d选项都包含了a,b。肯定是错的。
1 回复
发布于 2022-04-23 17:03
全外连接更好?
全外连接更好?
点赞 回复
发布于 2022-03-14 16:41
外连接可以是左向外连接,右向外连接或者完整外部连接
外连接可以是左向外连接,右向外连接或者完整外部连接
点赞 回复
发布于 2022-01-28 14:36 来自Android客户端
收起
单选题
数据库
17.

已知两个关系如下:

R

A

B

C

1

b1

c1

2

b2

c2


3

b1

c1

S

D

E

A

d1

e1

1

d2

e2

1

d3

e1

2



假设 R 的主键是 A S 的主键是 D ,在关系 S 的定义中包含外键子句:

FOREIGN KEY (A) REFERENCES R(A) ON DELETE NO ACTION ”,

下列 SQL 语句不能成功执行的是 )。

A
DELETE FROM R WHERE A=2
B
DELETE FROM R WHERE A=3
C
DELETE FROM S WHERE A=1
D
DELETE FROM S WHERE A=2
正确答案:A
你的答案:未作答
官方解析:
这道题考察了对数据库外键约束中ON DELETE NO ACTION的理解。

A选项正确,原因是:
当尝试删除R表中A=2的记录时,由于S表中有一条记录(d3,e1,2)的外键A引用了这条记录,且设置了ON DELETE NO ACTION约束,所以这个删除操作会被拒绝执行。NO ACTION表示当主表中的记录被删除时,如果从表中有对应的外键引用,则禁止删除操作。

分析其他选项:
B选项错误: R表中A=3的记录可以被删除,因为S表中没有任何记录引用A=3。

C选项错误: 删除S表中A=1的记录是允许的,因为这个操作不涉及到外键约束的检查。外键约束只对主表(被引用表)的删除操作有影响,而不限制从表(引用表)中的删除操作。

D选项错误: 同样地,删除S表中A=2的记录也是允许的,原因与C选项相同。删除从表中的记录不受外键约束的影响。

这个例子很好地展示了外键约束中ON DELETE NO ACTION的作用:保护数据的引用完整性,防止删除仍被引用的主表记录。
知识点:数据库
题友讨论(10)
ON DELETE NO ACTION 指定如果试图删除某一行,而该行的键被其他表的现有行中的外键所引用,则产生错误并回滚 DELETE 语句。
ON DELETE NO ACTION
指定如果试图删除某一行,而该行的键被其他表的现有行中的外键所引用,则产生错误并回滚 DELETE 语句。
22 回复
发布于 2019-02-25 11:21
执行A的时候,S表中还存在着引用A表中A=2这一行记录,所以不能执行
执行A的时候,S表中还存在着引用A表中A=2这一行记录,所以不能执行
22 回复
发布于 2017-08-25 09:49
S中引用了A主键,要删R中的A前,得先把引用给删了,因为别人还在引用你
S中引用了A主键,要删R中的A前,得先把引用给删了,因为别人还在引用你
12 回复
发布于 2019-02-27 11:52
先解释一下外键:
外键用于与另一张表的关联。是能确定另一张表记录的字段,用于保持数据的一致性
就此题来说,S表中的字段是R表的主键,所以S中的字段A是S的主键。

在执行下面语句时,A =2关联到了R表,所以执行失败。
DELETE FROM S WHERE A=2
先解释一下外键:
外键用于与另一张表的关联。是能确定另一张表记录的字段,用于保持数据的一致性
就此题来说,S表中的字段是R表的主键,所以S中的字段A是S的主键。

在执行下面语句时,A =2关联到了R表,所以执行失败。
DELETE FROM S WHERE A=2
9 回复
发布于 2018-03-17 10:35
S中引用了R中的主键A,因此要先把引用删除了,所以A=1,2都不能删除
S中引用了R中的主键A,因此要先把引用删除了,所以A=1,2都不能删除
6 回复
发布于 2019-03-11 21:09
如果执行A的话,B中的参照性条件收到破坏,所以不能执行
如果执行A的话,B中的参照性条件收到破坏,所以不能执行
5 回复
发布于 2017-06-21 19:25
S中引用了A主键,要删R中的A前,得先把引用给删了,因为别人还在引用你
S中引用了A主键,要删R中的A前,得先把引用给删了,因为别人还在引用你
3 回复
发布于 2020-02-22 23:32
DELETE FROM R WHERE A=2
DELETE FROM R WHERE A=2
1 回复
发布于 2021-05-02 15:23
  • FOREIGN KEY (A):这部分指定了一个外键,它在当前表中的列 A 上建立外键约束。这意味着列 A 包含了外键值,这些值将与另一个表中的某个列的值进行关联。

  • REFERENCES R(A):这部分指定了外键关联的目标表和目标列。在这种情况下,外键列 A 在当前表中将与表 R 的列 A 进行关联。这表示列 A 中的值必须引用表 R 中列 A 中的值。

  • ON DELETE NO ACTION:这部分指定了在外键关联中发生删除操作时采取的操作。在这种情况下,设置为 "NO ACTION" 表示如果试图删除表 R 中的某行,并且存在关联到当前表的外键,那么删除操作将不会执行(不会采取任何操作),除非解除外键约束。

这个外键约束的含义是:在当前表中的列 A 是一个外键,它引用了表 R 中的列 A。当尝试删除表 R 中的某行时,如果存在与当前表的外键关联,删除操作将不会执行,除非你手动解除外键约束。

外键约束是用来维护数据完整性的重要工具,它确保了表之间的关系和一致性。在这种情况下,它防止了删除表 R 中的数据,如果这些数据与当前表的外键关联存在冲突。

  • FOREIGN KEY (A):这部分指定了一个外键,它在当前表中的列 A 上建立外键约束。这意味着列 A 包含了外键值,这些值将与另一个表中的某个列的值进行关联。

  • REFERENCES R(A):这部分指定了外键关联的目标表和目标列。在这种情况下,外键列 A 在当前表中将与表 R 的列 A 进行关联。这表示列 A 中的值必须引用表 R 中列 A 中的值。

  • ON DELETE NO ACTION:这部分指定了在外键关联中发生删除操作时采取的操作。在这种情况下,设置为 "NO ACTION" 表示如果试图删除表 R 中的某行,并且存在关联到当前表的外键,那么删除操作将不会执行(不会采取任何操作),除非解除外键约束。

这个外键约束的含义是:在当前表中的列 A 是一个外键,它引用了表 R 中的列 A。当尝试删除表 R 中的某行时,如果存在与当前表的外键关联,删除操作将不会执行,除非你手动解除外键约束。

外键约束是用来维护数据完整性的重要工具,它确保了表之间的关系和一致性。在这种情况下,它防止了删除表 R 中的数据,如果这些数据与当前表的外键关联存在冲突。

点赞 回复
发布于 2023-10-10 17:02 广东
S中的A字段是R中的主键,且S中的A字段包含1和2。所以不能直接删除R中包含1和2的记录
S中的A字段是R中的主键,且S中的A字段包含1和2。所以不能直接删除R中包含1和2的记录
点赞 回复
发布于 2022-09-23 14:31 江苏
收起
单选题
SQL
数据库
18.

已知某期刊信息库中有作家信息表author(作者编号aid,作者姓名aname,作者笔名ausername,作者邮箱aemail,备注remarks),稿件表manuscript(稿件编号mid,标题mtitle,作者编号aid,交稿时间mtime)现需要设置外键作者编号,下列语句正确的是()

A

ALTER TABLE manuscript

ADD CONSTRAINT FK_aid

FOREIGN KEY (aid) REFERENCES author (aid)

B

ALTER TABLE manuscript

ADD CONSTRAINT FK_aid

FOREIGN KEY (manuscript.aid) REFERENCES author (aid)

C

ALTER TABLE manuscript

ADD FOREIGN KEY (manuscript.aid)

REFERENCES author (aid)

D

ALTER TABLE manuscript

ADD FOREIGN KEY (aid)

REFERENCES author (aid)

正确答案:B
你的答案:未作答
官方解析:

由于外键在两表的名称一致,需要指定aid的来源表,AD选项未指定;CD选项还缺少设置外键的关键字,因此错误。

知识点:数据库、SQL
题友讨论(27)
67 回复
发布于 2022-02-08 13:48
alter table 表名 add constraint FK_ID foreign key(你的外键字段名) REFERENCES 外表表名(对应的表的主键字段名);
alter table 表名 add constraint FK_ID foreign key(你的外键字段名) REFERENCES 外表表名(对应的表的主键字段名);
26 回复
发布于 2021-12-17 10:19
又是一道错误的题,你试试在mysql执行b选项会不会出错。
添加外键语句
ALTER TABLE 从表名 ADD [CONSTRAINT 约束名] FOREIGN KEY (从表的字段) REFERENCES 主表名(被引用 字段) [on update xx][on delete xx]; 
创建两张表dept,emp,dept作为主表,emp作为从表
create table dept
( #主表  d_id int primary key, #部门编号  d_name varchar(50) #部门名称 );
create table emp
( #从表  e_id int primary key, #员工编号  e_name varchar(5), #员工姓名  d_id int #员工所在的部门 );
虽然主表的部门编号和从表的部门编号一致,但是添加成功 且 无需使用constraint 对外键进行定义,答案解析错误
alter table emp add foreign key(d_id) references dept(d_id)

把外键删除,试着用b选项的方式添加外键报错
alter table emp add constraint fk_id foreign key(emp.d_id) references dept(d_id)


又是一道错误的题,你试试在mysql执行b选项会不会出错。
添加外键语句
ALTER TABLE 从表名 ADD [CONSTRAINT 约束名] FOREIGN KEY (从表的字段) REFERENCES 主表名(被引用 字段) [on update xx][on delete xx]; 
创建两张表dept,emp,dept作为主表,emp作为从表
create table dept
( #主表  d_id int primary key, #部门编号  d_name varchar(50) #部门名称 );
create table emp
( #从表  e_id int primary key, #员工编号  e_name varchar(5), #员工姓名  d_id int #员工所在的部门 );
虽然主表的部门编号和从表的部门编号一致,但是添加成功 且 无需使用constraint 对外键进行定义,答案解析错误
alter table emp add foreign key(d_id) references dept(d_id)

把外键删除,试着用b选项的方式添加外键报错
alter table emp add constraint fk_id foreign key(emp.d_id) references dept(d_id)


19 回复
发布于 2022-05-27 17:05
对,题错了,我们老师讲的时候也是没有"."的
对,题错了,我们老师讲的时候也是没有"."的
点赞 回复
发布于 2022-08-24 13:03 河南
0
添加主键约束:alter table 表名 add constraint 主键 (形如:PK_表名) primary key 表名(主键字段);
添加外键约束:alter table 从表 add constraint 外键(形如:FK_从表_主表) foreign key 从表(外键字段) references 主表(主键字段);
添加主键约束:alter table 表名 add constraint 主键 (形如:PK_表名) primary key 表名(主键字段);
添加外键约束:alter table 从表 add constraint 外键(形如:FK_从表_主表) foreign key 从表(外键字段) references 主表(主键字段);
5 回复
发布于 2022-04-14 17:09


看到题解说是因为两张表有相同字段,需要指出来源表,所以又重新测试了一下






看到题解说是因为两张表有相同字段,需要指出来源表,所以又重新测试了一下




2 回复
发布于 2022-08-15 14:31
感觉B和D都是对的呀!
感觉B和D都是对的呀!
2 回复
发布于 2022-03-16 16:30
好像mysql8 需要要有 constrint 命名字段
好像mysql8 需要要有 constrint 命名字段
点赞 回复
发布于 2022-04-13 17:22
0
alter table 表名 add constraint 外键名字 foreign key (本表的外键列名) 主表名(主表主键名)
alter table 表名 add constraint 外键名字 foreign key (本表的外键列名) 主表名(主表主键名)
1 回复
发布于 2024-02-27 01:48 广东 来自Android客户端
FK_和PK_是什么意思呢?感谢!
FK_和PK_是什么意思呢?感谢!
1 回复
发布于 2022-04-19 19:29 来自Android客户端
外键和主键的英文缩写,这是默认的命名方式
外键和主键的英文缩写,这是默认的命名方式
1 回复
发布于 2022-07-19 23:00 来自iOS客户端
0
大神们,A为什么不行

大神们,A为什么不行

1 回复
发布于 2022-04-19 00:02
两个表都有aid,属性,a选项没有区分aid是来自哪一个表
两个表都有aid,属性,a选项没有区分aid是来自哪一个表
点赞 回复
发布于 2023-01-18 10:49 湖南 来自Android客户端
0
这里已经给了表名 alter 所以不需要。
这里已经给了表名 alter 所以不需要。
点赞 回复
发布于 2024-10-05 18:39 江苏
0
为什么C错了啊

为什么C错了啊

点赞 回复
发布于 2024-06-16 22:37 四川
收起
  • 1
  • 2
单选题
数据库
SQL
19.
有一张学生成绩表sc(sno 学号,class 课程,score 成绩),示例如下:

请问哪个语句可以查询出每个学生的英语、数学的成绩(行转列,一个学生输出一行记录,比如输出[1, 89, 90])?
A
select sno,class,score from sc where class in('english','math')
B
select sno,
if(class='english',score,0),
if(class='math',score,0)
from sc
where class in('english','math')
C
select sno,
case when class='english' then score else 0 end ,
case when class='math' then score else 0 end
from sc
where class in('english','math')
D
select sno,
sum(if(class='english',score,0)) as english,
sum( if(class='math',score,0) ) as math
from sc
where class in('english','math')
group by sno
正确答案:D
你的答案:未作答
官方解析:
原本数据是一个人多行数据,每行一个成绩,现在要行转列,因此需要按学号分组,组内将数据拆成列
知识点:数据库、Java工程师、C++工程师、算法工程师、SQL
题友讨论(77)
错误答案C:没达到行转列的目的
select sno,
case when class='english' then score else 0 end ,
case when class='math' then score else 0 end
from sc
where class in('english','math')
结果:一个学生最终会出现两条记录(英语和数学),每条记录都是满足当前class条件的那门课程成绩正常,其余课程成绩为0
张三 80 0
张三 0 79
王五 60 0
王五 0 88
修改为:
select sno,
sum(case when class='english' then score else 0 end ) as english,
sum(case when class='math' then score else 0 end) as math
from sc
where class in('english','math')
group by sno;

正确答案D:
 select sno,
sum(if(class='english',score,0)) as english,
sum( if(class='math',score,0) ) as math
from sc
where class in('english','math')
group by sno
如果科目为English为真,English成绩+score,否则+0!!!
结果:
张三 80 79
王五 60 88

错误答案C:没达到行转列的目的
select sno,
case when class='english' then score else 0 end ,
case when class='math' then score else 0 end
from sc
where class in('english','math')
结果:一个学生最终会出现两条记录(英语和数学),每条记录都是满足当前class条件的那门课程成绩正常,其余课程成绩为0
张三 80 0
张三 0 79
王五 60 0
王五 0 88
修改为:
select sno,
sum(case when class='english' then score else 0 end ) as english,
sum(case when class='math' then score else 0 end) as math
from sc
where class in('english','math')
group by sno;

正确答案D:
 select sno,
sum(if(class='english',score,0)) as english,
sum( if(class='math',score,0) ) as math
from sc
where class in('english','math')
group by sno
如果科目为English为真,English成绩+score,否则+0!!!
结果:
张三 80 79
王五 60 88

197 回复
发布于 2020-09-08 09:15
感觉这道题的关键就是猜出原先的表长咋样😴
感觉这道题的关键就是猜出原先的表长咋样😴
6 回复
发布于 2021-05-27 12:49
0
主要就是看看有没有理解行转列
主要就是看看有没有理解行转列
1 回复
发布于 2021-08-18 10:08
0
mysql执行顺序是先找from表,然后再where,然后Group by这些,最后Select后的语句。
这道题先找到这个表,再看where后,只把class为英语数学的筛选出来,然后通过学号分组,每个学生的成绩放到一条记录里,英语数学成绩这两个字段便是查找完每个学生的记录后得到的,需要用到sum

mysql执行顺序是先找from表,然后再where,然后Group by这些,最后Select后的语句。
这道题先找到这个表,再看where后,只把class为英语数学的筛选出来,然后通过学号分组,每个学生的成绩放到一条记录里,英语数学成绩这两个字段便是查找完每个学生的记录后得到的,需要用到sum

50 回复
发布于 2020-03-20 14:26
sum目的是所有英语成绩加起来?还是一个学生只有一个英语、一个数学成绩
sum目的是所有英语成绩加起来?还是一个学生只有一个英语、一个数学成绩
点赞 回复
发布于 2020-07-05 15:24
0
为什么需要用到sum呢
为什么需要用到sum呢
1 回复
发布于 2020-07-31 20:23
0
展开4条回复
<p>此题C项不对的原因是缺少了分组聚合,因为每个学生是有多门课的成绩的。例:case when class=‘english’ then score else 0 end,此时会出现一条英语成绩正常,其他科目成绩为0的记录,以此类推一个学生最终会出现多条记录,每条记录都是满足当前class条件的那门课程成绩正常,其余课程成绩为0,为了满足行转列且每个学生一条记录,那么还需要对生成的结果按照学号分组聚合(此处sum、max、min都行)</p>
<p>此题C项不对的原因是缺少了分组聚合,因为每个学生是有多门课的成绩的。例:case when class=‘english’ then score else 0 end,此时会出现一条英语成绩正常,其他科目成绩为0的记录,以此类推一个学生最终会出现多条记录,每条记录都是满足当前class条件的那门课程成绩正常,其余课程成绩为0,为了满足行转列且每个学生一条记录,那么还需要对生成的结果按照学号分组聚合(此处sum、max、min都行)</p>
48 回复
发布于 2020-07-04 22:30 来自iOS客户端
老哥,有水平
老哥,有水平
1 回复
发布于 2020-08-03 09:52
0
但是后面的class in ('english','math')已经限定了只有两门课呀
但是后面的class in ('english','math')已经限定了只有两门课呀
点赞 回复
发布于 2020-08-27 02:55
0
展开3条回复
sum函数作用:不加的话就会导致 
sno english math
1 90 0
1 0 85
而我们想要的结果是
sno english math
1 90 85  将上面2条记录合并就正常啦!  

group by作用:不加会导致所有学生英语成绩都加在一起,数学成绩也会加在一起
sno english math
1 185 165

sum函数作用:不加的话就会导致 
sno english math
1 90 0
1 0 85
而我们想要的结果是
sno english math
1 90 85  将上面2条记录合并就正常啦!  

group by作用:不加会导致所有学生英语成绩都加在一起,数学成绩也会加在一起
sno english math
1 185 165

36 回复
发布于 2020-12-22 23:21
老哥,就属你讲的通透!!把sum讲清楚了
老哥,就属你讲的通透!!把sum讲清楚了
1 回复
发布于 2021-11-14 22:37 来自Android客户端
0
语法执行顺序:from-where-group by-select where后只剩下学科english、math sno class score 1 english 89 2 english 90 1 math 79 2 math 88 … … … 用group by对学号进行分组 sno class score 1 english 89 1 math 79 2 english 90 2 math 88 … … … sum(if())操作是分别针对分组后的表进行判断求和 分组1 sno class score 1 english 89 1 math 79 分组2 sno class score 2 english 90 2 math 88 … … … 逐行对分组1进行判断得到新表(中间表) if(class ='english', score, 0) if(class ='math', score, 0) 89 0 0 79 sum(89+0)=89 sum(0+79)=79 这步操作类似于excel中的sum求和,最后select呈现的学科成绩也是这个
语法执行顺序:from-where-group by-select where后只剩下学科english、math sno class score 1 english 89 2 english 90 1 math 79 2 math 88 … … … 用group by对学号进行分组 sno class score 1 english 89 1 math 79 2 english 90 2 math 88 … … … sum(if())操作是分别针对分组后的表进行判断求和 分组1 sno class score 1 english 89 1 math 79 分组2 sno class score 2 english 90 2 math 88 … … … 逐行对分组1进行判断得到新表(中间表) if(class ='english', score, 0) if(class ='math', score, 0) 89 0 0 79 sum(89+0)=89 sum(0+79)=79 这步操作类似于excel中的sum求和,最后select呈现的学科成绩也是这个
5 回复
发布于 02-21 15:36 重庆
0
我还以为表数据1个学生只有一行数据。。。。
原来是要求答案1个学生只有一行数据😂😂😂😂😂
我还以为表数据1个学生只有一行数据。。。。
原来是要求答案1个学生只有一行数据😂😂😂😂😂
32 回复
发布于 2020-01-14 09:41
你不是一个人
你不是一个人
点赞 回复
发布于 2020-03-11 13:10
0
不是人是啥
不是人是啥
2 回复
发布于 2020-04-05 22:11
0
展开3条回复
sum(if(class='english',score,0)) as english,
class='english'为真English加score;否则,加0
sum(if(class='english',score,0)) as english,
class='english'为真English加score;否则,加0
23 回复
发布于 2020-02-25 00:10
只是为了防止为null,一个值加么有意义
只是为了防止为null,一个值加么有意义
2 回复
发布于 2020-03-08 23:33
0
谢谢回答啦
谢谢回答啦
点赞 回复
发布于 2020-06-18 04:22
0
/**
如图所示正确答案
*/

/**
加sum的目的
*/


/**
如图所示正确答案
*/

/**
加sum的目的
*/


18 回复
发布于 2020-10-19 15:07
第二个没有加group by
第二个没有加group by
1 回复
发布于 2021-06-29 00:45 来自Android客户端
0
故意没加的,要不然怎么凸显加sum的目的
故意没加的,要不然怎么凸显加sum的目的
点赞 回复
发布于 2021-09-02 16:18 来自Android客户端
0
展开2条回复
为什么还要sum啊      1个课程  几个成绩啊?
为什么还要sum啊      1个课程  几个成绩啊?
6 回复
发布于 2019-09-08 15:00
sum是可以用于行转列的函数
sum是可以用于行转列的函数
12 回复
发布于 2020-03-05 21:07
0
不用sum,用max、min也可以
不用sum,用max、min也可以
4 回复
发布于 2020-03-24 08:58
0
展开3条回复
<p>要求一个学生只有一行数据,所以用group by学号 进行分组。使用group by 语句时,select的字段要么是group by 后面的字段,要么是被聚合函数包裹的。这里用sum,min,max可能都行没试过。然后就是if(判定条件,结果1,结果2)和java中if 条件?结果1,结果2一样</p>
<p>要求一个学生只有一行数据,所以用group by学号 进行分组。使用group by 语句时,select的字段要么是group by 后面的字段,要么是被聚合函数包裹的。这里用sum,min,max可能都行没试过。然后就是if(判定条件,结果1,结果2)和java中if 条件?结果1,结果2一样</p>
5 回复
发布于 2021-01-12 21:27 来自iOS客户端
<p>if(条件,结果1,结果2)类似条件?结果1:结果2</p>
<p>if(条件,结果1,结果2)类似条件?结果1:结果2</p>
5 回复
发布于 2020-05-02 13:30 来自iOS客户端
收起
  • 1
  • 2
  • 3
  • 4
单选题
数据库
20.
给出数据表score(stu_id,name,math,english,chinese),下列语句正确的是()
A
select *,sum(english) from score
B
delete * from score
C
select stu_id,sum(math) from score
D
select sum(math),avg(chinese) from score
正确答案:D
你的答案:未作答
官方解析:
选项D正确。在SQL中,select后面可以直接跟聚合函数(如sum、avg等),这种写法是合法且常用的。D选项中select sum(math),avg(chinese)的语法完全正确,用于计算数学成绩总和和语文成绩平均分。

分析其他选项的错误原因:

A错误:select *,sum(english)的语法是错误的。因为使用聚合函数时,不能同时select普通列(除非使用GROUP BY)。select *会返回所有列的所有行数据,而sum()会返回一个汇总值,这两者在列数上不匹配。

B错误:delete语句的正确语法是"delete from 表名 where 条件",不能使用*。delete *是错误的语法。

C错误:select stu_id,sum(math)的语法也是错误的。因为stu_id是普通列,而sum(math)是聚合值,如果要这样查询必须使用GROUP BY分组。没有GROUP BY的情况下,不能将普通列和聚合函数同时使用。

而D选项中使用了两个聚合函数sum()和avg(),都返回单个汇总值,因此语法完全正确。这也是在统计分析时的常见查询方式。
知识点:数据库、SQL+MySQL、测试、后端开发、客户端开发、前端开发、人工智能/算法、数据、运维/技术支持
题友讨论(16)
select *,sum(english) form score 和select stu_id,sum(math) from score 是第一个对应多个元组,而第二个只有一个数。
delete * from是不标准的语法
select *,sum(english) form score 和select stu_id,sum(math) from score 是第一个对应多个元组,而第二个只有一个数。
delete * from是不标准的语法
11 回复
发布于 2016-12-08 14:50
select * 在这为啥不能用,对B选项有疑惑
select * 在这为啥不能用,对B选项有疑惑
点赞 回复
发布于 2019-09-06 16:15
0
delete from table B是delete不是select
delete from table B是delete不是select
点赞 回复
发布于 2024-11-07 14:19 北京
0
首先select操作得到的从形式上是一张二维表,实际上可以认为是元组的集合。那么如果想要满足形式上的二维表,在用select进行投影操作时必须要同行同列。
对于A,select sum(english)得到的是所有english列的总和,应该得到的是一行一列的元组。而select *显然得到的是多行多列,这两者显然只能进行笛卡尔积操作,而不能进行连接操作,更不用说连接之后的投影了。
对于B.delete *这个“*”的使用是不合法的,因为delete是以元组为单位进行删除的。select用是为了代表所有的列,delete这样使用会造成*使用的歧异。
对于C,还是来自于A的问题,由于没有显示指明where,也没有进行group by,导致stu_id投影后是一个多行一列的表,而sum(math)则是一个一行一列的表,导致连接操作无法使用,而之后select投影就无从做起。
对于D,两个一行一列的数据拼一起,没有问题。
首先select操作得到的从形式上是一张二维表,实际上可以认为是元组的集合。那么如果想要满足形式上的二维表,在用select进行投影操作时必须要同行同列。
对于A,select sum(english)得到的是所有english列的总和,应该得到的是一行一列的元组。而select *显然得到的是多行多列,这两者显然只能进行笛卡尔积操作,而不能进行连接操作,更不用说连接之后的投影了。
对于B.delete *这个“*”的使用是不合法的,因为delete是以元组为单位进行删除的。select用是为了代表所有的列,delete这样使用会造成*使用的歧异。
对于C,还是来自于A的问题,由于没有显示指明where,也没有进行group by,导致stu_id投影后是一个多行一列的表,而sum(math)则是一个一行一列的表,导致连接操作无法使用,而之后select投影就无从做起。
对于D,两个一行一列的数据拼一起,没有问题。
10 回复
发布于 2019-03-05 11:38
如果D对的话,为什么C不是对的,表示疑问?
如果D对的话,为什么C不是对的,表示疑问?
7 回复
发布于 2017-01-05 18:19
select stu_id,sum(math)时,stu_id会有很多列,而sum(math)只有一列
select stu_id,sum(math)时,stu_id会有很多列,而sum(math)只有一列
4 回复
发布于 2017-01-19 23:28
0
很多行吧
很多行吧
点赞 回复
发布于 2017-03-01 12:37
0
展开5条回复
D 这个查询是正确的。它从score表中选择了数学成绩的总和以及中文成绩的平均值。这里没有涉及到任何非聚合列的选择,也不需要GROUP BY子句,因为整个表的数据都被聚合成了单个结果行。 
C错 没有group by时不能选择非聚合列;
B delete from table
A 对所有列同时计算英语成绩,无group by
D 这个查询是正确的。它从score表中选择了数学成绩的总和以及中文成绩的平均值。这里没有涉及到任何非聚合列的选择,也不需要GROUP BY子句,因为整个表的数据都被聚合成了单个结果行。 
C错 没有group by时不能选择非聚合列;
B delete from table
A 对所有列同时计算英语成绩,无group by
2 回复
发布于 2024-11-12 18:11 广东
语法 4-2 保留数据表,仅删除全部数据行的 DELETE 语句

DELETE FROM <表名>;

语法 4-2 保留数据表,仅删除全部数据行的 DELETE 语句

DELETE FROM <表名>;


点赞 回复
发布于 2019-01-28 13:39
使用函数不是要有 group by?
使用函数不是要有 group by?
点赞 回复
发布于 2018-08-15 23:09
Mark。牛逼
Mark。牛逼
点赞 回复
发布于 2017-10-06 17:31
收起
单选题
SQL
数据库
21.

关于MySQL常见索引的描述正确是()

A

创建UNIQUE索引,索引列的值必须唯一,不允许有空值

B

一个表中可以创建多个全文索引

C

为提高效率可建立组合索引,遵循“最左前缀”原则

D

使用非聚集索引需要将物理数据页中的数据按列重新排序

正确答案:C
你的答案:未作答
官方解析:

A选项,唯一索引不允许两行具有相同的索引值,包括NULL值,允许有空值;B选项,每个表只允许有一个全文索引;D选项,非聚集索引具有完全独立于数据行的结构,所以不需要将物理数据页中的数据按列重新排序。

知识点:数据库、SQL、SQL+MySQL
题友讨论(10)
创建唯一索引的目的不是为了提高访问速度,而只是为了避免数据出现重复。唯一索引可以有多个但索引列的值必须唯一,索引列的值允许有空值。如果能确定某个数据列将只包含彼此各不相同的值,在为这个数据列创建索引的时候就应该使用关键字UNIQUE,把它定义为一个唯一索引
创建唯一索引的目的不是为了提高访问速度,而只是为了避免数据出现重复。唯一索引可以有多个但索引列的值必须唯一,索引列的值允许有空值。如果能确定某个数据列将只包含彼此各不相同的值,在为这个数据列创建索引的时候就应该使用关键字UNIQUE,把它定义为一个唯一索引
16 回复
发布于 2022-03-02 11:02
主键索引:
它是一种特殊的唯一索引,不允许有空值。
通常不会删除主键,因为设计主键一定与业务逻辑无关。
普通索引:
即一个索引值包含单个列。一个表可以有多个单例索引
它是最基本的索引,没有任何限制
普通索引允许被索引的数据列包含重复的值
唯一索引:
与"普通索引"类似,不同的就是:索引列的值必须唯一,但允许有空值。
联合索引:
一个索引包含多个列,专门用于组合搜索,其效率大于索引合并
全文索引:
全文索引基本上不可能用到。如果有这样的需求,请用第三方框架
————————————————
版权声明:本文为CSDN博主「OceanStar的学习笔记」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/zhizhengguan/article/details/87188963
主键索引:
它是一种特殊的唯一索引,不允许有空值。
通常不会删除主键,因为设计主键一定与业务逻辑无关。
普通索引:
即一个索引值包含单个列。一个表可以有多个单例索引
它是最基本的索引,没有任何限制
普通索引允许被索引的数据列包含重复的值
唯一索引:
与"普通索引"类似,不同的就是:索引列的值必须唯一,但允许有空值。
联合索引:
一个索引包含多个列,专门用于组合搜索,其效率大于索引合并
全文索引:
全文索引基本上不可能用到。如果有这样的需求,请用第三方框架
————————————————
版权声明:本文为CSDN博主「OceanStar的学习笔记」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/zhizhengguan/article/details/87188963
10 回复
发布于 2023-02-23 11:56 河南
1.唯一索引是在表上一个或者多个字段组合建立的索引,这个或者这些字段的值组合起来在表中不可以重复。
 2.非唯一索引是在表上一个或者多个字段组合建立的索引,这个或者这些字段的值组合起来在表中可以重复,不要求唯一。
 3.主键索引(主索引)是唯一索引的特定类型。
1.唯一索引是在表上一个或者多个字段组合建立的索引,这个或者这些字段的值组合起来在表中不可以重复。
 2.非唯一索引是在表上一个或者多个字段组合建立的索引,这个或者这些字段的值组合起来在表中可以重复,不要求唯一。
 3.主键索引(主索引)是唯一索引的特定类型。
4 回复
发布于 2022-01-12 22:02
为什么全文索引只能有一个?
为什么全文索引只能有一个?
1 回复
发布于 2022-12-03 16:49 广东
主键不为空,字段信息唯一
主键不为空,字段信息唯一
点赞 回复
发布于 2022-01-12 11:04
unique可以为空
unique可以为空
点赞 回复
发布于 2021-12-13 14:31 来自Android客户端
unique索引不需要唯一?
unique索引不需要唯一?
点赞 回复
发布于 2021-12-13 09:11 来自iOS客户端
如果字段没有指定 not null 则unique列可以有多个null
如果字段没有指定 not null 则unique列可以有多个null
1 回复
发布于 2021-12-14 16:32
0
记反了吧
记反了吧
点赞 回复
发布于 2023-12-15 18:30 广东
0
展开1条回复
收起
单选题
Java
22.
下面有关maven和ant的描述,描述错误的是?
A
Ant 没有正式的约定如一个一般项目的目录结构,你必须明确的告诉 Ant 哪里去找源代码
B
Maven 拥有约定,因为你遵循了约定,它已经知道你的源代码在哪里
C
maven和ant都有“生命周期”的概念,当你输入一个命令后,maven或者ant会执行一系列的有序的步骤,直到到达你指定的生命周期
D
Ant构建文件默认命名为build.xml,Maven默认构建文件为pom.xml
正确答案:C
你的答案:未作答
官方解析:
Maven和Ant的本质区别在于构建工具的设计理念。C选项的说法是错误的,因为只有Maven才有生命周期(lifecycle)的概念,而Ant没有。

Maven的生命周期是固定的,包含了清理、编译、测试、打包、集成测试、验证、部署等阶段。当执行某个阶段时,会自动按顺序执行之前的所有阶段。

而Ant是过程式的构建工具,通过编写build.xml来定义一系列任务的执行顺序,这些任务之间可以有依赖关系,但并不是一个标准的生命周期概念。

分析其他选项:

A正确:Ant没有标准的目录结构约定,需要在build.xml中明确指定源代码、资源文件等的位置。

B正确:Maven遵循"约定优于配置"的原则,默认的项目结构是固定的,如src/main/java存放源代码,src/test/java存放测试代码等。

D正确:Ant的默认构建文件是build.xml,Maven的默认构建文件是pom.xml,这是两个工具的基本配置文件。
知识点:Java、开发工具
题友讨论(76)
Ant 没有生命周期,你必须定义目标和目标之间的依赖。你必须手工为每个目标附上一个任务序列。
Ant 没有生命周期,你必须定义目标和目标之间的依赖。你必须手工为每个目标附上一个任务序列。
109 回复
发布于 2015-11-26 20:57

Ant的作用:是一种基于Java的build工具

  1. 能够用ant编译java类。生成class文件
  2. ant能够自己定义标签、配置文件,用于构建。
  3. ant能够把相关层构建成jar包 。
  4. ant把整个项目生成web包。并公布到Tomcat  

Ant的长处:

  1. 跨平台性:Ant是纯Java语言编写的,因此具有非常好的跨平台性。

  2. 操作简单:Ant是由一个内置任务和可选任务组成的。Ant执行时须要一个XML文件(构建文件)
  1. Ant通过调用target树,就能够运行各种task:每一个task实现了特定接口对象。因为Ant构建文件时XML格式的文件。所以非常easy维护和书写,并且结构非常清晰。
  2. Ant能够集成到开发环境中:因为Ant的跨平台性和操作简单的特点。它非常easy集成到一些开发环境中去。 

Maven的作用: 除了以程序构建能力为特色之外,还提供高级项目管理工具。 

Maven除了具备Ant的功能外。还添加了下面基本的功能:

  1. 使用Project Object Model来对软件项目管理。
  2. 内置了很多其它的隐式规则,使得构建文件更加简单。
  3. 内置依赖管理和Repository来实现依赖的管理和统一存储;
  4. 内置了软件构建的生命周期;

Maven的长处:

  1. 拥有约定,知道你的代码在哪里,放到哪里去
  2. 拥有一个生命周期,比如运行 mvn install就能够自己主动运行编译,測试。打包等构建过程
  3. 仅仅须要定义一个pom.xml,然后把源代码放到默认的文件夹,Maven帮你处理其它事情
  4. 拥有依赖管理。仓库管理 

总体的比較:

       Ant将提供了非常多能够重用的task,比如 copy, move, delete以及junit单元測试Maven则提供了非常多能够重用的过程。

Ant的作用:是一种基于Java的build工具

  1. 能够用ant编译java类。生成class文件
  2. ant能够自己定义标签、配置文件,用于构建。
  3. ant能够把相关层构建成jar包 。
  4. ant把整个项目生成web包。并公布到Tomcat  

Ant的长处:

  1. 跨平台性:Ant是纯Java语言编写的,因此具有非常好的跨平台性。

  2. 操作简单:Ant是由一个内置任务和可选任务组成的。Ant执行时须要一个XML文件(构建文件)
  1. Ant通过调用target树,就能够运行各种task:每一个task实现了特定接口对象。因为Ant构建文件时XML格式的文件。所以非常easy维护和书写,并且结构非常清晰。
  2. Ant能够集成到开发环境中:因为Ant的跨平台性和操作简单的特点。它非常easy集成到一些开发环境中去。 

Maven的作用: 除了以程序构建能力为特色之外,还提供高级项目管理工具。 

Maven除了具备Ant的功能外。还添加了下面基本的功能:

  1. 使用Project Object Model来对软件项目管理。
  2. 内置了很多其它的隐式规则,使得构建文件更加简单。
  3. 内置依赖管理和Repository来实现依赖的管理和统一存储;
  4. 内置了软件构建的生命周期;

Maven的长处:

  1. 拥有约定,知道你的代码在哪里,放到哪里去
  2. 拥有一个生命周期,比如运行 mvn install就能够自己主动运行编译,測试。打包等构建过程
  3. 仅仅须要定义一个pom.xml,然后把源代码放到默认的文件夹,Maven帮你处理其它事情
  4. 拥有依赖管理。仓库管理 

总体的比較:

       Ant将提供了非常多能够重用的task,比如 copy, move, delete以及junit单元測试Maven则提供了非常多能够重用的过程。

80 回复
发布于 2019-10-05 16:02
mark
mark
点赞 回复
发布于 2022-03-11 00:36
0
mark
mark
点赞 回复
发布于 2022-04-04 23:06 来自Android客户端
0
展开16条回复
Ant和Maven都是基于Java的构建(build)工具。理论上来说,有些类似于(Unix)C中的make ,但没有make的缺陷。Ant是软件构建工具,Maven的定位是软件项目管理和理解工具。 
Ant特点 ›
没有一个约定的目录结构 ›必须明确让ant做什么,什么时候做,然后编译,打包 ›没有生命周期,必须定义目标及其实现的任务序列 ›没有集成依赖管理 
Maven特点 
›拥有约定,知道你的代码在哪里,放到哪里去 ›拥有一个生命周期,例如执行 mvn install 就可以自动执行编译,测试,打包等构建过程 ›只需要定义一个pom.xml,然后把源码放到默认的目录,Maven帮你处理其他事情 ›拥有依赖管理,仓库管理
Ant和Maven都是基于Java的构建(build)工具。理论上来说,有些类似于(Unix)C中的make ,但没有make的缺陷。Ant是软件构建工具,Maven的定位是软件项目管理和理解工具。 
Ant特点 ›
没有一个约定的目录结构 ›必须明确让ant做什么,什么时候做,然后编译,打包 ›没有生命周期,必须定义目标及其实现的任务序列 ›没有集成依赖管理 
Maven特点 
›拥有约定,知道你的代码在哪里,放到哪里去 ›拥有一个生命周期,例如执行 mvn install 就可以自动执行编译,测试,打包等构建过程 ›只需要定义一个pom.xml,然后把源码放到默认的目录,Maven帮你处理其他事情 ›拥有依赖管理,仓库管理
20 回复
发布于 2016-04-10 22:45
Maven是一个项目管理工具,它包含了一个项目对象模型 (Project Object Model),一组标准集合,一个项目生命周期(Project Lifecycle),一个依赖管理系统(Dependency Management System),和用来运行定义在生命周期阶段(phase)中插件(plugin)目标(goal)的逻辑。当你使用Maven的时候,你用一个明确定义的项目对象模型来描述你的项目,然后Maven可以应用横切的逻辑,这些逻辑来自一组共享的(或者自定义的)插件。 Maven 有一个生命周期,当你运行 mvn install 的时候被调用。这条命令告诉 Maven 执行一系列的有序的步骤,直到到达你指定的生命周期。遍历生命周期旅途中的一个影响就是,Maven 运行了许多默认的插件目标,这些目标完成了像编译和创建一个 JAR 文件这样的工作。 此外,Maven能够很方便的帮你管理项目报告,生成站点,管理JAR文件,等等。
Maven是一个项目管理工具,它包含了一个项目对象模型 (Project Object Model),一组标准集合,一个项目生命周期(Project Lifecycle),一个依赖管理系统(Dependency Management System),和用来运行定义在生命周期阶段(phase)中插件(plugin)目标(goal)的逻辑。当你使用Maven的时候,你用一个明确定义的项目对象模型来描述你的项目,然后Maven可以应用横切的逻辑,这些逻辑来自一组共享的(或者自定义的)插件。 Maven 有一个生命周期,当你运行 mvn install 的时候被调用。这条命令告诉 Maven 执行一系列的有序的步骤,直到到达你指定的生命周期。遍历生命周期旅途中的一个影响就是,Maven 运行了许多默认的插件目标,这些目标完成了像编译和创建一个 JAR 文件这样的工作。 此外,Maven能够很方便的帮你管理项目报告,生成站点,管理JAR文件,等等。
11 回复
发布于 2016-03-12 01:02
ant没有生命周期
ant没有生命周期
4 回复
发布于 2021-12-17 00:15 来自Android客户端
三短一长选最长
三短一长选最长
4 回复
发布于 2018-07-31 11:11
😂
😂
点赞 回复
发布于 2018-08-19 19:28
0
😂😂
😂😂
点赞 回复
发布于 2019-02-20 21:24
0
展开3条回复

Ant是软件构建工具,Maven的定位是软件项目管理和理解工具。Maven除了具备Ant的功能外,还增加了以下主要的功能:

1)使用Project Object Model来对软件项目管理;

2)内置了更多的隐式规则,使得构建文件更加简单;

3)内置依赖管理和Repository来实现依赖的管理和统一存储;

4)内置了软件构建的生命周期;

Ant是软件构建工具,Maven的定位是软件项目管理和理解工具。Maven除了具备Ant的功能外,还增加了以下主要的功能:

1)使用Project Object Model来对软件项目管理;

2)内置了更多的隐式规则,使得构建文件更加简单;

3)内置依赖管理和Repository来实现依赖的管理和统一存储;

4)内置了软件构建的生命周期;
4 回复
发布于 2017-09-20 15:23
Ant和Maven都是基于Java的构建(build)工具。理论上来说,有些类似于(Unix)C中的make ,但没有make的缺陷。Ant是软件构建工具,Maven的定位是软件项目管理和理解工具。 Ant特点 › 没有一个约定的目录结构 ›必须明确让ant做什么,什么时候做,然后编译,打包 ›没有生命周期,必须定义目标及其实现的任务序列 ›没有集成依赖管理 Maven特点 ›拥有约定,知道你的代码在哪里,放到哪里去 ›拥有一个生命周期,例如执行 mvn install 就可以自动执行编译,测试,打包等构建过程 ›只需要定义一个pom.xml,然后把源码放到默认的目录,Maven帮你处理其他事情 ›拥有依赖管理,仓库管理
Ant和Maven都是基于Java的构建(build)工具。理论上来说,有些类似于(Unix)C中的make ,但没有make的缺陷。Ant是软件构建工具,Maven的定位是软件项目管理和理解工具。 Ant特点 › 没有一个约定的目录结构 ›必须明确让ant做什么,什么时候做,然后编译,打包 ›没有生命周期,必须定义目标及其实现的任务序列 ›没有集成依赖管理 Maven特点 ›拥有约定,知道你的代码在哪里,放到哪里去 ›拥有一个生命周期,例如执行 mvn install 就可以自动执行编译,测试,打包等构建过程 ›只需要定义一个pom.xml,然后把源码放到默认的目录,Maven帮你处理其他事情 ›拥有依赖管理,仓库管理
3 回复
发布于 2021-10-19 19:58 来自Android客户端
ant没有约定的目录结构、没有依赖管理、没有生命周期。
ant没有约定的目录结构、没有依赖管理、没有生命周期。
2 回复
发布于 2022-01-31 11:22
<p>ant没有生命周期</p>
<p>ant没有生命周期</p>
2 回复
发布于 2020-04-28 16:11 来自iOS客户端
收起
  • 1
  • 2
  • 3
  • 4
单选题
Linux
23.

Linux 用户磁盘配额配置文件 aquota.user 的默认访问权限是()

A
755
B
644
C
700
D
600
正确答案:D
你的答案:未作答
官方解析:
aquota.user 的权限是 -rw------,所以权限十进制值为 600。
知识点:Linux、Linux
题友讨论(7)
aqouta.user是用户磁盘配额需要的配置文件,而不是可执行文件
r:4    w:2    x:1
所以权限为-rw-------,即为600
aqouta.user是用户磁盘配额需要的配置文件,而不是可执行文件
r:4    w:2    x:1
所以权限为-rw-------,即为600
12 回复
发布于 2022-03-26 22:18
牛逼
牛逼
点赞 回复
发布于 2023-04-14 01:32 湖南
0
坐等大佬解释
坐等大佬解释
3 回复
发布于 2022-03-04 12:30 来自Android客户端
你首先理解 7 6 分别代表什么意思 多刷点题目就知道了 然后 记住这个文件就好了 默认权限 6 rw- --- --- 代表本用户读写权限 分组用户没权限 其他用户也没有权限 r 4 w 2 x(执行)1
你首先理解 7 6 分别代表什么意思 多刷点题目就知道了 然后 记住这个文件就好了 默认权限 6 rw- --- --- 代表本用户读写权限 分组用户没权限 其他用户也没有权限 r 4 w 2 x(执行)1
2 回复
发布于 2022-03-12 09:52
0

当涉及到文件权限时,Linux系统使用一个三位一组的数字表示文件权限。每个文件或目录具有所有者、所属组和其他用户的权限。

在这种情况下,aquota.user 文件是用于记录用户磁盘配额信息的文件。通常情况下,只有系统管理员才能够对这个文件进行修改,而普通用户并没有对这个文件的修改权限,因为这个文件包含了系统敏感信息,也是为了保护这个配额信息不被随意更改。因此,这个文件的默认访问权限为 600。

具体来说,这个权限表示:

  • 所有者(通常是管理员)具有读取和写入权限。
  • 所属组和其他用户没有任何权限。

这种设置确保了只有管理员可以对这个文件进行读取和修改,从而维护了用户磁盘配额信息的安全性和准确性。

当涉及到文件权限时,Linux系统使用一个三位一组的数字表示文件权限。每个文件或目录具有所有者、所属组和其他用户的权限。

在这种情况下,aquota.user 文件是用于记录用户磁盘配额信息的文件。通常情况下,只有系统管理员才能够对这个文件进行修改,而普通用户并没有对这个文件的修改权限,因为这个文件包含了系统敏感信息,也是为了保护这个配额信息不被随意更改。因此,这个文件的默认访问权限为 600。

具体来说,这个权限表示:

  • 所有者(通常是管理员)具有读取和写入权限。
  • 所属组和其他用户没有任何权限。

这种设置确保了只有管理员可以对这个文件进行读取和修改,从而维护了用户磁盘配额信息的安全性和准确性。

2 回复
发布于 2023-11-09 16:27 湖南
磁盘没有x权限 最多读写
磁盘没有x权限 最多读写
2 回复
发布于 2022-04-10 02:21 来自Android客户端
d
d
2 回复
发布于 2017-03-07 18:46
收起
单选题
Linux
24.
使用什么命令进行查询,并不真正对硬盘上的文件系统进行查找,而是对文件名数据库进行检索,而且可以使用通配符?和*?
A
whereis
B
find
C
locate
D
type
正确答案:C
你的答案:未作答
官方解析:
locate命令是正确答案,因为它通过在文件名数据库中检索来查找文件,而不是直接在文件系统中搜索。locate命令支持使用通配符?和*进行模糊匹配,查询速度非常快。它使用updatedb程序创建的数据库(/var/lib/mlocate/mlocate.db),这个数据库会定期更新。

分析其他选项:

A. whereis命令主要用于定位可执行文件、源代码文件和帮助文档的位置,搜索范围有限,且不支持全面的通配符匹配。

B. find命令是在实际的文件系统中进行搜索,会遍历硬盘上的目录,搜索速度相对较慢。虽然支持通配符,但它是实时搜索而不是检索数据库。

D. type命令用于显示命令的类型(是内部命令还是外部命令),与文件查找无关。

需要注意的是,locate命令的搜索结果取决于数据库的更新时间,如果数据库未及时更新,可能无法找到最新创建的文件。可以使用updatedb命令手动更新数据库。
知识点:Linux
题友讨论(18)
locate并不真正对硬盘上的文件系统进行查找,而是对文件名数据库进行检索,而且可以使用通配符?和*
find命令从指定的起始目录开始,递归地搜索其各个子目录,查找满足寻找条件的文件并对之采取相关的操作
whereis命令只能用于程序名的搜索,而且只搜索二进制文件(参数-b)、man说明文件(参数-m)和源代码文件(参数-s)
type命令用来显示指定命令的类型,判断给出的指令是内部指令还是外部指令


locate并不真正对硬盘上的文件系统进行查找,而是对文件名数据库进行检索,而且可以使用通配符?和*
find命令从指定的起始目录开始,递归地搜索其各个子目录,查找满足寻找条件的文件并对之采取相关的操作
whereis命令只能用于程序名的搜索,而且只搜索二进制文件(参数-b)、man说明文件(参数-m)和源代码文件(参数-s)
type命令用来显示指定命令的类型,判断给出的指令是内部指令还是外部指令


58 回复
发布于 2017-06-06 21:56
后劲大哥真给劲!
后劲大哥真给劲!
1 回复
发布于 2023-08-11 08:48 江苏
0
  我们经常在linux要查找某个文件,但不知道放在哪里了,可以使用下面的一些命令来搜索: 
  • which       查看可执行文件的位置 
  • whereis    查看文件的位置 
  • locate       配合数据库查看文件位置 
  • find          实际搜寻硬盘查询文件名称 (find也可以根据文件大小-size 时间-atime 正则表达式-regex)

  我们经常在linux要查找某个文件,但不知道放在哪里了,可以使用下面的一些命令来搜索: 
  • which       查看可执行文件的位置 
  • whereis    查看文件的位置 
  • locate       配合数据库查看文件位置 
  • find          实际搜寻硬盘查询文件名称 (find也可以根据文件大小-size 时间-atime 正则表达式-regex)

36 回复
发布于 2017-06-24 15:38
whereis也配合了数据库
whereis也配合了数据库
点赞 回复
发布于 2018-01-31 22:13
0
locate [-d ][--help][--version][范本样式...]
locate [-d ][--help][--version][范本样式...]
点赞 回复
发布于 2020-04-05 19:09
0
展开2条回复
which returns the pathnames of the files (or links) which would be executed in the current environment, had its arguments been given as  commands  in a strictly POSIX-conformant shell.
whereis locates the binary, source and manual files for  the  specified command  names.
locate  reads  one or more databases prepared by updatedb(8) and writes file names matching at least one of the PATTERNs  to  standard  output, one per line.



which returns the pathnames of the files (or links) which would be executed in the current environment, had its arguments been given as  commands  in a strictly POSIX-conformant shell.
whereis locates the binary, source and manual files for  the  specified command  names.
locate  reads  one or more databases prepared by updatedb(8) and writes file names matching at least one of the PATTERNs  to  standard  output, one per line.



9 回复
发布于 2018-01-04 09:32
locate与find 不同: find 是去硬盘找,locate 只在/var/lib/slocate资料库中找
locate的速度比find快,它并不是真的查找,而是查数据库,一般文件数据库在/var/lib/slocate/slocate.db中,所以locate的查找并不是实时的,而是以数据库的更新为准。
  • whereis命令用于查找文件
该指令会在特定目录中查找符合条件的文件,这些文件应属于原始代码、二进制文件,或是帮助文件。
该指令只能用于查找二进制文件、源代码文件和man手册页,一般文件的定位需使用locate命令。
语法:whereis [-bfmsu][-B <目录>...][-M <目录>...][-S <目录>...][文件...]

  • find命令用来在指定目录下查找文件。
任何位于参数之前的字符串都将被视为欲查找的目录名,如果使用该命令时,不设置任何参数,则find命令将在当前目录下查找子目录与文件。并且将查找到的子目录和文件全部进行显示。
语法:find   path   -option   [   -print ]   [ -exec   -ok   command ]   {} \;

  • locate命令用于查找符合条件的文档。
它会去保存文档和目录名称的数据库内,查找合乎范本样式条件的文档或目录。
一般情况我们只需要输入 locate your_file_name 即可查找指定文件。
语法:locate [-d ][--help][--version][范本样式...]

  • type命令 用来显示指定命令的类型。
它可以判断给出的指令是内部指令还是外部指令。
语法:type (选项) (参数)


locate与find 不同: find 是去硬盘找,locate 只在/var/lib/slocate资料库中找
locate的速度比find快,它并不是真的查找,而是查数据库,一般文件数据库在/var/lib/slocate/slocate.db中,所以locate的查找并不是实时的,而是以数据库的更新为准。
  • whereis命令用于查找文件
该指令会在特定目录中查找符合条件的文件,这些文件应属于原始代码、二进制文件,或是帮助文件。
该指令只能用于查找二进制文件、源代码文件和man手册页,一般文件的定位需使用locate命令。
语法:whereis [-bfmsu][-B <目录>...][-M <目录>...][-S <目录>...][文件...]

  • find命令用来在指定目录下查找文件。
任何位于参数之前的字符串都将被视为欲查找的目录名,如果使用该命令时,不设置任何参数,则find命令将在当前目录下查找子目录与文件。并且将查找到的子目录和文件全部进行显示。
语法:find   path   -option   [   -print ]   [ -exec   -ok   command ]   {} \;

  • locate命令用于查找符合条件的文档。
它会去保存文档和目录名称的数据库内,查找合乎范本样式条件的文档或目录。
一般情况我们只需要输入 locate your_file_name 即可查找指定文件。
语法:locate [-d ][--help][--version][范本样式...]

  • type命令 用来显示指定命令的类型。
它可以判断给出的指令是内部指令还是外部指令。
语法:type (选项) (参数)


7 回复
发布于 2020-04-05 19:02
Linux常用查找命令有五个:
1,which:查找并显示给定命令的绝对路径,环境变量PATH中保存了查找命令时需要遍历的目录。可以查看某个系统命令是否存在,以及执行的是哪个位置的命令。
选项:-n<文件名长度>:指定的长度必须大于等于所有文件中最常的文件名
           -p<文件名长度>:与-n相同但是包含文件的路径
           -w:输出时栏位宽度
           -V:版本信息
参数:指令名列表
2,whereis:首先去掉文件名中的前缀空格和以.开头的任何字符,在数据库中(var/lib/slocate/slocate.db)查找与上述处理后 的文件名相匹配的二进制文件,源文件,帮助手册文件。
选项:
-b:只查找二进制文件
-B<目录>:在设置目录下查找二进制文件
-f:不显示文件名前的路径名称
-m:只查找说明文件
-M<目录>:在设置目录下查找说明文件
-s:只查找原始代码文件
-S:同上在目录中
-u:查找不包含指定类型的文件
参数:要查找的二进制程序,源文件和手册页的指令名
3,type:显示指定命令的类型,判断句给出的指令是内部还是外部指令
选项:
-t:“file”外部指令、“alias”命令别名、“builtin”内部指令
-p:如果是外部指令显示其绝对路径
-a:在PATH指定路径中显示给定指令的信息
参数:要显示类型的指令
4,locate:查询系统上预建的文件索引数据库(/var/lib/mlocate/mlocate.db)依赖实现构建的索引。
查找速度快,模糊查找,非实时查找,搜索文件全路径
选项:
-i:不区分大小写
-n:只列举前N个匹配
参数:查找字符创:要查找的文件名含有的字符串
5,find:在指定目录下查找文件。查找略慢,精确实时
选项:
查找条件
只搜索层级:
    -maxdepth level 最大搜索深度,指定目录为第一级
    根据文件名和inode查找
        -name "文件名"
        -iname "文件名" :不区分大小写
        -inum n:按inode相同的inode号的文件
        -links n :链接数为n的文件
        -regex "PATTERN" :以PATTERN匹配整个文件路径的字符串,不仅仅是文件名称
    根据所属组查找:
        -user USERNAME
        -group GROUPNAME
        -uid UserID
        -gid GroupID
        -nouser
        -nogroup
根据文件类型查找:
        -type TYPE
                f  普通文件
                d 目录文件
                l 符号链接文件
                s 套接字文件
                b 块文件
                c 字符设备文件
                p 管道文件
根据文件大小查找:
        -size [+|-]  #UNIT
        #UNIT:(#-1,#) -#UNIT:(0,#-1) +#UNIT:(#,∞)
         根据时间戳: 
                以“天”为单位: -atime[+|-]# #:[#,#+1] +#:[#+1,,∞] -#:[0,#]     -ctime     -mtime 
                以“分钟”为单位: -amin     -mmin     -cmin 
        根据权限查找: -perm[/|-]MODE
                                MODE:精确权限匹配
                                     /MODE:任何一类(u,g,o)对象的权限中只要能一位匹配即可,或关系,+从centos7开始淘汰 
                                    -MODE:每一类对象都必须同时拥有指定权限,与关系 
                                    O 表示不关注
参数:起始目录,查找文件的起始目录
比较:
    which:支持可执行文件,查找PATH,原理遍历PATH指定目录找完全匹配的文件名的可执行文件,效率高
    whereis:支持二进制文件源文件帮助文档,查找数据库索引,原理数据库索引,对去除.之后的所有字符后的文件名完全匹配,效率高
    locate:支持所有文件类型,数据库索引,绝对路径,部分匹配,效率高,模糊查找
    find:支持所有文件类型,查找指定路径,默认遍历当前路径和子路径,原理遍历磁盘,效率低
Linux常用查找命令有五个:
1,which:查找并显示给定命令的绝对路径,环境变量PATH中保存了查找命令时需要遍历的目录。可以查看某个系统命令是否存在,以及执行的是哪个位置的命令。
选项:-n<文件名长度>:指定的长度必须大于等于所有文件中最常的文件名
           -p<文件名长度>:与-n相同但是包含文件的路径
           -w:输出时栏位宽度
           -V:版本信息
参数:指令名列表

2,whereis:首先去掉文件名中的前缀空格和以.开头的任何字符,在数据库中(var/lib/slocate/slocate.db)查找与上述处理后 的文件名相匹配的二进制文件,源文件,帮助手册文件。
选项:
-b:只查找二进制文件
-B<目录>:在设置目录下查找二进制文件
-f:不显示文件名前的路径名称
-m:只查找说明文件
-M<目录>:在设置目录下查找说明文件
-s:只查找原始代码文件
-S:同上在目录中
-u:查找不包含指定类型的文件
参数:要查找的二进制程序,源文件和手册页的指令名

3,type:显示指定命令的类型,判断句给出的指令是内部还是外部指令
选项:
-t:“file”外部指令、“alias”命令别名、“builtin”内部指令
-p:如果是外部指令显示其绝对路径
-a:在PATH指定路径中显示给定指令的信息
参数:要显示类型的指令

4,locate:查询系统上预建的文件索引数据库(/var/lib/mlocate/mlocate.db)依赖实现构建的索引。
查找速度快,模糊查找,非实时查找,搜索文件全路径
选项:
-i:不区分大小写
-n:只列举前N个匹配
参数:查找字符创:要查找的文件名含有的字符串

5,find:在指定目录下查找文件。查找略慢,精确实时
选项:
查找条件
只搜索层级:
    -maxdepth level 最大搜索深度,指定目录为第一级
    根据文件名和inode查找
        -name "文件名"
        -iname "文件名" :不区分大小写
        -inum n:按inode相同的inode号的文件
        -links n :链接数为n的文件
        -regex "PATTERN" :以PATTERN匹配整个文件路径的字符串,不仅仅是文件名称
    根据所属组查找:
        -user USERNAME
        -group GROUPNAME
        -uid UserID
        -gid GroupID
        -nouser
        -nogroup

根据文件类型查找:
        -type TYPE
                f  普通文件
                d 目录文件
                l 符号链接文件
                s 套接字文件
                b 块文件
                c 字符设备文件
                p 管道文件

根据文件大小查找:
        -size [+|-]  #UNIT
        #UNIT:(#-1,#) -#UNIT:(0,#-1) +#UNIT:(#,∞)
         根据时间戳: 
                以“天”为单位: -atime[+|-]# #:[#,#+1] +#:[#+1,,∞] -#:[0,#]     -ctime     -mtime 
                以“分钟”为单位: -amin     -mmin     -cmin 
        根据权限查找: -perm[/|-]MODE
                                MODE:精确权限匹配
                                     /MODE:任何一类(u,g,o)对象的权限中只要能一位匹配即可,或关系,+从centos7开始淘汰 
                                    -MODE:每一类对象都必须同时拥有指定权限,与关系 
                                    O 表示不关注
参数:起始目录,查找文件的起始目录


比较:
    which:支持可执行文件,查找PATH,原理遍历PATH指定目录找完全匹配的文件名的可执行文件,效率高
    whereis:支持二进制文件源文件帮助文档,查找数据库索引,原理数据库索引,对去除.之后的所有字符后的文件名完全匹配,效率高
    locate:支持所有文件类型,数据库索引,绝对路径,部分匹配,效率高,模糊查找
    find:支持所有文件类型,查找指定路径,默认遍历当前路径和子路径,原理遍历磁盘,效率低
3 回复
发布于 2019-07-31 11:56
 locate并不真正对硬盘上的文件系统进行查找,而是对文件名数据库进行检索,而且可以使用通配符?和*
find命令从指定的起始目录开始,递归地搜索其各个子目录,查找满足寻找条件的文件并对之采取相关的操作
whereis命令只能用于程序名的搜索,而且只搜索二进制文件(参数-b)、man说明文件(参数-m)和源代码文件(参数-s)
type命令用来显示指定命令的类型,判断给出的指令是内部指令还是外部指令

 locate并不真正对硬盘上的文件系统进行查找,而是对文件名数据库进行检索,而且可以使用通配符?和*
find命令从指定的起始目录开始,递归地搜索其各个子目录,查找满足寻找条件的文件并对之采取相关的操作
whereis命令只能用于程序名的搜索,而且只搜索二进制文件(参数-b)、man说明文件(参数-m)和源代码文件(参数-s)
type命令用来显示指定命令的类型,判断给出的指令是内部指令还是外部指令

2 回复
发布于 2023-09-15 19:24 云南
locate并不真正对硬盘上的文件系统进行查找,而是对文件名数据库进行检索,而且可以使用通配符?和* find命令从指定的起始目录开始,递归地搜索其各个子目录,查找满足寻找条件的文件并对之采取相关的操作 whereis命令只能用于程序名的搜索,而且只搜索二进制文件(参数-b)、man说明文件(参数-m)和源代码文件(参数-s) type命令用来显示指定命令的类型,判断给出的指令是内部指令还是外部指令
locate并不真正对硬盘上的文件系统进行查找,而是对文件名数据库进行检索,而且可以使用通配符?和* find命令从指定的起始目录开始,递归地搜索其各个子目录,查找满足寻找条件的文件并对之采取相关的操作 whereis命令只能用于程序名的搜索,而且只搜索二进制文件(参数-b)、man说明文件(参数-m)和源代码文件(参数-s) type命令用来显示指定命令的类型,判断给出的指令是内部指令还是外部指令
2 回复
发布于 2021-05-18 21:46 来自Android客户端
locate 是使用系统中 /var/lib/mlocate/mlocate.db数据文件,可以使用updatedb进行对最近新添加的文件进行更新。
locate 是使用系统中 /var/lib/mlocate/mlocate.db数据文件,可以使用updatedb进行对最近新添加的文件进行更新。
2 回复
发布于 2019-04-07 16:35

locate命令用于通过文件名数据库进行快速查找文件。它并不直接对硬盘上的文件系统进行搜索,而是对预先构建的文件名数据库进行检索。这种方式比实时搜索更快速和高效。

locate命令可以使用通配符来模糊匹配文件名。通配符*可以匹配任意字符序列,包括零个或多个字符。

选项说明如下:

  • whereis:用于定位二进制、源代码和帮助文档等文件的位置。
  • find:用于在指定路径下递归搜索文件和目录,并执行指定的操作。
  • locate:用于通过文件名数据库进行快速查找文件。
  • type:用于确定给定命令是否为内置命令、可执行文件或别名。

locate命令用于通过文件名数据库进行快速查找文件。它并不直接对硬盘上的文件系统进行搜索,而是对预先构建的文件名数据库进行检索。这种方式比实时搜索更快速和高效。

locate命令可以使用通配符来模糊匹配文件名。通配符*可以匹配任意字符序列,包括零个或多个字符。

选项说明如下:

  • whereis:用于定位二进制、源代码和帮助文档等文件的位置。
  • find:用于在指定路径下递归搜索文件和目录,并执行指定的操作。
  • locate:用于通过文件名数据库进行快速查找文件。
  • type:用于确定给定命令是否为内置命令、可执行文件或别名。
1 回复
发布于 2023-11-01 10:45 湖南
关于locate命令多说两句
有些Linux版本系统刚安装好发现locate命令用不了,这是因为locate通过快速搜索数据库来输出结果的,这个搜索的数据库是由另一个叫updatedb的程序创建的。这个程序是一个定期任务,一般每天自动执行一次更新数据库中的数据,所以当发现locate查找不了文件时,先手动执行updatedb程序更新数据库就可以了。
locate命令如果系统中没有的话,Redhat系的系统可以安装mlocate。
关于locate命令多说两句
有些Linux版本系统刚安装好发现locate命令用不了,这是因为locate通过快速搜索数据库来输出结果的,这个搜索的数据库是由另一个叫updatedb的程序创建的。这个程序是一个定期任务,一般每天自动执行一次更新数据库中的数据,所以当发现locate查找不了文件时,先手动执行updatedb程序更新数据库就可以了。
locate命令如果系统中没有的话,Redhat系的系统可以安装mlocate。
1 回复
发布于 2022-04-23 10:56
收起
  • 1
  • 2
单选题
Java
25.
ServletConfig接口默认是哪里实现的?
A
Servlet
B
GenericServlet
C
HttpServlet
D
用户自定义servlet
正确答案:B
你的答案:未作答
官方解析:
ServletConfig接口是由GenericServlet类默认实现的。GenericServlet是一个抽象类,它实现了Servlet和ServletConfig这两个接口,为所有Servlet提供了基础实现。

分析各选项:

A. Servlet错误,因为Servlet是一个接口,它定义了Servlet的基本行为,但并不实现ServletConfig接口。

B. 正确,GenericServlet实现了ServletConfig接口,它包含了getServletConfig()、getServletContext()、getInitParameter()等方法的具体实现。这些实现被所有继承GenericServlet的类所共享。

C. HttpServlet错误,HttpServlet继承自GenericServlet,它只是使用了GenericServlet中已经实现的ServletConfig功能,而不是直接实现ServletConfig接口。

D. 用户自定义servlet错误,用户自定义的Servlet通常继承自HttpServlet或GenericServlet,也是使用这些父类已经实现的ServletConfig功能,而不需要自己实现。

所以在Servlet体系结构中,ServletConfig接口的默认实现是在GenericServlet类中完成的,这为整个Servlet框架提供了统一的配置管理机制。
知识点:Java
题友讨论(85)
377 回复
发布于 2017-10-24 16:39
赞\(≧▽≦)/
赞\(≧▽≦)/
1 回复
发布于 2017-10-24 16:40
0
这是用powerdesign画出来的吗?
这是用powerdesign画出来的吗?
3 回复
发布于 2018-04-18 22:12
0
展开31条回复
239 回复
发布于 2015-10-08 22:51
mark
mark
2 回复
发布于 2016-09-18 14:54
0
直观明了
直观明了
点赞 回复
发布于 2017-09-08 19:11
0
展开13条回复
选B
GenericServlet类的实现接口中包括了ServletConfig接口,但是它自身的init(ServletConfig config)方法又需要外界给它传递一个实现ServletConfig的对象,就是说GenericServlet和ServletConfig的依赖关系既是继承关系,也是一种关联关系。
选B
GenericServlet类的实现接口中包括了ServletConfig接口,但是它自身的init(ServletConfig config)方法又需要外界给它传递一个实现ServletConfig的对象,就是说GenericServlet和ServletConfig的依赖关系既是继承关系,也是一种关联关系。
46 回复
发布于 2015-06-02 10:19
黑科技大学视频能借一步说话嘛?😎
黑科技大学视频能借一步说话嘛?😎
5 回复
发布于 2022-04-25 10:29 来自iOS客户端
0
25 回复
发布于 2019-01-07 20:30
一目了然
一目了然
点赞 回复
发布于 2021-02-04 11:09
0
public abstract class GenericServlet
extends java.lang.Object
implements Servlet, ServletConfig, java.io.Serializable

从Servlet 的API文档上面可以看到上面一段,
抽象类GenericServlet实现了Servlet, ServletConfig等接口。
public abstract class HttpServlet extends GenericServlet
implements java.io.Serializable

抽象类HttpServlet 继承自GenericServlet

public abstract class GenericServlet
extends java.lang.Object
implements Servlet, ServletConfig, java.io.Serializable

从Servlet 的API文档上面可以看到上面一段,
抽象类GenericServlet实现了Servlet, ServletConfig等接口。
public abstract class HttpServlet extends GenericServlet
implements java.io.Serializable

抽象类HttpServlet 继承自GenericServlet

20 回复
发布于 2015-08-18 21:30
一般依赖把被依赖的名字放前面,继承把父类名字放后面
一般依赖把被依赖的名字放前面,继承把父类名字放后面
9 回复
发布于 2018-03-08 17:47
群主牛批
群主牛批
点赞 回复
发布于 2018-11-19 19:06
0
找规律不然不好记
找规律不然不好记
点赞 回复
发布于 2018-11-19 20:07
0
GenericServlet类实现ServletConfig接口
GenericServlet类实现ServletConfig接口
5 回复
发布于 2014-11-21 20:54

javax.servlet
Class GenericServlet

java.lang.Object
|
+--javax.servlet.GenericServlet 
Direct Known Subclasses: HttpServlet
public abstract class GenericServlet extends java.lang.Objectimplements Servlet , ServletConfig , java.io.Serializable

javax.servlet
Class GenericServlet

java.lang.Object
|
+--javax.servlet.GenericServlet 
Direct Known Subclasses: HttpServlet
public abstract class GenericServlet extends java.lang.Objectimplements Servlet , ServletConfig , java.io.Serializable
3 回复
发布于 2016-10-11 19:20
GenericServlet是一个抽象类,它实现了ServletConfig接口,而HttpServlet类继承了GenericServlet类。
GenericServlet是一个抽象类,它实现了ServletConfig接口,而HttpServlet类继承了GenericServlet类。
2 回复
发布于 2022-05-13 17:02 来自Android客户端
HttpServlet是GenericServlet的实现类,GenericServlet是一个抽象类,继承了servlet接口,ServletConfig配置信息接口 java.io.serializable序列化接口
HttpServlet是GenericServlet的实现类,GenericServlet是一个抽象类,继承了servlet接口,ServletConfig配置信息接口 java.io.serializable序列化接口
2 回复
发布于 2017-11-27 12:39
mark
mark
点赞 回复
发布于 2024-10-14 11:03 四川
0
收起
  • 1
  • 2
  • 3
  • 4
多选题
Java
26.
下列关于修饰符混用的说法,错误的包括( )
A
abstract不能与final并列修饰同一个类
B
abstract类中可以有private的成员
C
abstract方法必须在abstract类中0
D
static方法中能处理非static的成员变量
正确答案:CD
你的答案:未作答
官方解析:

选项分析:

A. abstract不能与final并列修饰同一个类
正确。abstract类必须被继承,而final类禁止继承,两者冲突。例如:

abstract final class MyClass { } // 编译错误

B. abstract类中可以有private的成员
正确。抽象类可以包含私有字段和非抽象方法(但抽象方法本身不能为private)。例如:

abstract class MyClass {
private int field; // 允许
private void method() { } // 允许
}

C. abstract方法必须在abstract类中
错误(此说法不全面)。

  • 抽象方法可以存在于两种地方:
    1. 抽象类中(正确)
    2. 接口中(选项未涵盖)
      接口中的方法默认是public abstract的(即使不显式声明)。例如:
      interface MyInterface {
      void myMethod(); // 默认是public abstract
      }
      因此,抽象方法不一定必须在抽象类中(也可在接口中),选项C的说法错误。

D. static方法中能处理非static的成员变量
错误。静态方法不能直接访问非静态成员变量(需通过对象实例)。例如:

class Test {
int nonStaticVar = 10;
static void staticMethod() {
System.out.println(nonStaticVar); // 编译错误!
}
}

结论:

错误的说法包括:

  • C(抽象方法不一定在抽象类中,也可在接口中)
  • D(静态方法不能直接处理非静态成员变量)

正确答案:C 和 D

知识点:Java
题友讨论(5)
c选项抽象方法不是还能在接口中吗
d选项静态方法不能直接访问非静态变量,但是能间接访问的吧
c选项抽象方法不是还能在接口中吗
d选项静态方法不能直接访问非静态变量,但是能间接访问的吧
6 回复
发布于 04-07 22:19 江苏
所以D错了 不能直接访问 但是能进行间接访问; 我也觉得C不对 接口中默认的方法都是抽象方法
所以D错了 不能直接访问 但是能进行间接访问; 我也觉得C不对 接口中默认的方法都是抽象方法
1 回复
发布于 05-13 15:00 山东
0
C可以是接口 D可以通过对象间接处理
C可以是接口 D可以通过对象间接处理
1 回复
发布于 07-24 23:29 广东 来自iOS客户端
static方法在对象还未被创建时就可以引用 ,而非static的成员变量需要对象被创建后才存在。static方法不能处理一个不存在的变量
static方法在对象还未被创建时就可以引用 ,而非static的成员变量需要对象被创建后才存在。static方法不能处理一个不存在的变量
1 回复
发布于 05-06 08:04 广东 来自Android客户端
D也不太严谨 通过对象是可以处理非静态成员的,应该说是能不能直接进行操作非静态成员
D也不太严谨 通过对象是可以处理非静态成员的,应该说是能不能直接进行操作非静态成员
点赞 回复
发布于 05-07 16:42 山东
收起
多选题
Java
27.
下面有关java类加载器,说法正确的是?
A
引导类加载器(bootstrap class loader):它用来加载 Java 的核心库,是用原生代码来实现的
B
扩展类加载器(extensions class loader):它用来加载 Java 的扩展库。
C
系统类加载器(system class loader):它根据 Java 应用的类路径(CLASSPATH)来加载 Java 类
D
tomcat为每个App创建一个Loader,里面保存着此WebApp的ClassLoader。需要加载WebApp下的类时,就取出ClassLoader来使用
正确答案:ABCD
你的答案:未作答
官方解析:
Java类加载器是JVM的重要组成部分,所有选项描述都是正确的。让我们逐个分析:

A选项正确:引导类加载器是最顶层的类加载器,负责加载Java核心库(JAVA_HOME/jre/lib)中的类,如rt.jar等。它是用C++实现的,在Java中表现为null。

B选项正确:扩展类加载器负责加载Java扩展库,位于JAVA_HOME/jre/lib/ext目录下的JAR包。它是Java语言编写的,是引导类加载器的子类加载器。

C选项正确:系统类加载器(也称为应用类加载器)负责加载应用程序classpath路径下的类。它是扩展类加载器的子类加载器,是开发者最常用的类加载器。

D选项正确:Tomcat为每个Web应用创建一个独立的类加载器实例,实现了类的隔离加载。这样不同的Web应用可以使用同名但不同版本的类库,避免类冲突。

这四种类加载器共同组成了Java的类加载体系,遵循双亲委派模型:
1. 先将类加载请求委托给父类加载器
2. 父加载器无法加载时,子加载器才会尝试加载
3. 确保Java核心类库的安全性和一致性

这种机制保证了Java运行环境的稳定性和安全性。
知识点:2015、Java、Java工程师
题友讨论(102)

Java中的类加载器

Java 中的类加载器大致可以分成两类,一类是系统提供的,另外一类则是由Java 应用开发人员编写的。系统提供的类加载器主要有下面三个:


引导类加载器(bootstrap class loader):

它用来加载 Java 的核心库,是用原生代码来实现的,并不继承自 java.lang.ClassLoader。主要负责jdk_home/lib目录下的核心api 或 -Xbootclasspath 选项指定的jar包装入工作(其中的jdk_home是指配置jdk环境变量是java_home的配置路径,一般是jdk/jre所在目录)。

扩展类加载器(extensions class loader):

它用来加载 Java 的扩展库。Java虚拟机的实现会提供一个扩展库目录,扩展类加载器在此目录里面查找并加载 Java 类,主要负责jdk_home/lib/ext目录下的jar包或 -Djava.ext.dirs 指定目录下的jar包装入工作。

系统类加载器(system class loader):

它根据 Java 应用的类路径(CLASSPATH)来加载 Java 类。一般来说,Java 应用的类都是由它来完成加载的。可以通过 ClassLoader.getSystemClassLoader()来获取它。主要负责CLASSPATH/-Djava.class.path所指的目录下的类与jar包装入工作.


除了系统提供的类加载器以外,开发人员可以通过继承java.lang.ClassLoader类的方式实现自己的类加载器,从而进行动态加载class文件,以满足一些特殊的需求,这体现java动态实时类装入特性。

除了引导类加载器之外,所有的类加载器都有一个父类加载器,通过getParent()方法可以得到。对于系统提供的类加载器来说,系统类加载器的父类加载器是扩展类加载器,而扩展类加载器的父类加载器是引导类加载器;对于开发人员编写的类加载器来说,其父类加载器是加载此类加载器 Java 类的类加载器。因为类加载器 Java 类如同其它的 Java 类一样,也是要由类加载器来加载的。一般来说,开发人员编写的类加载器的父类加载器是系统类加载器。类加载器通过这种方式组织起来,形成树状结构。树的根节点就是引导类加载器。下图中给出了一个典型的类加载器树状组织结构示意图,其中的箭头指向的是父类加载器。

Java中的类加载器

Java 中的类加载器大致可以分成两类,一类是系统提供的,另外一类则是由Java 应用开发人员编写的。系统提供的类加载器主要有下面三个:


引导类加载器(bootstrap class loader):

它用来加载 Java 的核心库,是用原生代码来实现的,并不继承自 java.lang.ClassLoader。主要负责jdk_home/lib目录下的核心api 或 -Xbootclasspath 选项指定的jar包装入工作(其中的jdk_home是指配置jdk环境变量是java_home的配置路径,一般是jdk/jre所在目录)。

扩展类加载器(extensions class loader):

它用来加载 Java 的扩展库。Java虚拟机的实现会提供一个扩展库目录,扩展类加载器在此目录里面查找并加载 Java 类,主要负责jdk_home/lib/ext目录下的jar包或 -Djava.ext.dirs 指定目录下的jar包装入工作。

系统类加载器(system class loader):

它根据 Java 应用的类路径(CLASSPATH)来加载 Java 类。一般来说,Java 应用的类都是由它来完成加载的。可以通过 ClassLoader.getSystemClassLoader()来获取它。主要负责CLASSPATH/-Djava.class.path所指的目录下的类与jar包装入工作.


除了系统提供的类加载器以外,开发人员可以通过继承java.lang.ClassLoader类的方式实现自己的类加载器,从而进行动态加载class文件,以满足一些特殊的需求,这体现java动态实时类装入特性。

除了引导类加载器之外,所有的类加载器都有一个父类加载器,通过getParent()方法可以得到。对于系统提供的类加载器来说,系统类加载器的父类加载器是扩展类加载器,而扩展类加载器的父类加载器是引导类加载器;对于开发人员编写的类加载器来说,其父类加载器是加载此类加载器 Java 类的类加载器。因为类加载器 Java 类如同其它的 Java 类一样,也是要由类加载器来加载的。一般来说,开发人员编写的类加载器的父类加载器是系统类加载器。类加载器通过这种方式组织起来,形成树状结构。树的根节点就是引导类加载器。下图中给出了一个典型的类加载器树状组织结构示意图,其中的箭头指向的是父类加载器。

141 回复
发布于 2017-11-11 16:58
为什么这么详细回复只有0😂
为什么这么详细回复只有0😂
点赞 回复
发布于 2021-03-01 22:13
0
点赞 回复
发布于 2021-12-17 11:46
0
展开9条回复


57 回复
发布于 2018-12-26 22:12
这张图真不错
这张图真不错
点赞 回复
发布于 2022-03-13 15:56
0
mark
mark
点赞 回复
发布于 2022-04-08 23:26
0
展开3条回复
bootstrap classloader -引导(也称为原始)类加载器,它负责加载Java的核心类。 extension classloader -扩展类加载器,它负责加载JRE的扩展目录(JAVA_HOME/jre/lib/ext或者由java.ext.dirs系统属性指定的)中JAR的类包。 system classloader -系统(也称为应用)类加载器,它负责在JVM被启动时,加载来自在命令java中的-classpath或者java.class.path系统属性
或者 CLASSPATH*作系统属性所指定的JAR类包和类路径。

bootstrap classloader -引导(也称为原始)类加载器,它负责加载Java的核心类。 extension classloader -扩展类加载器,它负责加载JRE的扩展目录(JAVA_HOME/jre/lib/ext或者由java.ext.dirs系统属性指定的)中JAR的类包。 system classloader -系统(也称为应用)类加载器,它负责在JVM被启动时,加载来自在命令java中的-classpath或者java.class.path系统属性
或者 CLASSPATH*作系统属性所指定的JAR类包和类路径。

25 回复
发布于 2015-07-22 21:20
当JVM(Java虚拟机)启动时,会形成由三个类加载器组成的初始类加载器层次结构: bootstrap classloader | extension classloader | system classloader
当JVM(Java虚拟机)启动时,会形成由三个类加载器组成的初始类加载器层次结构: bootstrap classloader | extension classloader | system classloader
2 回复
发布于 2015-07-22 21:21
0
tomcat 是服务java web服务器 为每个webapp 建立classloader
tomcat 是服务java web服务器 为每个webapp 建立classloader
2 回复
发布于 2015-07-22 21:53
0
这种题听都没听过怎么做?根据字面我只敢选BD。笔试是不是可以偷偷地拿手机啊
这种题听都没听过怎么做?根据字面我只敢选BD。笔试是不是可以偷偷地拿手机啊
24 回复
发布于 2015-08-19 11:45
孤陋寡闻了撒!不要作弊,作弊毁一身
孤陋寡闻了撒!不要作弊,作弊毁一身
7 回复
发布于 2016-08-01 10:15
0
不要作弊,作弊毁一生
不要作弊,作弊毁一生
5 回复
发布于 2016-08-01 23:03
0
展开24条回复
用原生代码实现的这句话听着别扭,到底什么意思?
启动类加载器 用来加载java的核心库, 此类加载器并不继承于java.lang.ClassLoader,不能被java程序直接调用,代码是使用C++编写的.是虚拟机自身的一部分
用原生代码实现的这句话听着别扭,到底什么意思?
启动类加载器 用来加载java的核心库, 此类加载器并不继承于java.lang.ClassLoader,不能被java程序直接调用,代码是使用C++编写的.是虚拟机自身的一部分
6 回复
发布于 2017-04-17 21:36
&hellip;我也感觉这个原声带那怪怪的&hellip;
…我也感觉这个原声带那怪怪的…
点赞 回复
发布于 2019-07-05 14:25
0
java不是有些虚拟机用的是纯java编写的吗,那启动类加载器也是用java编写的,题目应该协商java默认的虚拟机。
java不是有些虚拟机用的是纯java编写的吗,那启动类加载器也是用java编写的,题目应该协商java默认的虚拟机。
1 回复
发布于 2019-10-17 22:10
0
展开1条回复
A.引导类加载器(bootstrap class loader):它用来加载 Java 的核心库,是用原生代码来实现的
B.扩展类加载器(extensions class loader):它用来加载 Java 的扩展库。
C.系统类加载器(system class loader):它根据 Java 应用的类路径(CLASSPATH)来加载 Java 类
D.tomcat为每个App创建一个Loader,里面保存着此WebApp的ClassLoader。需要加载WebApp下的类时,就取出ClassLoader来使用
A.引导类加载器(bootstrap class loader):它用来加载 Java 的核心库,是用原生代码来实现的
B.扩展类加载器(extensions class loader):它用来加载 Java 的扩展库。
C.系统类加载器(system class loader):它根据 Java 应用的类路径(CLASSPATH)来加载 Java 类
D.tomcat为每个App创建一个Loader,里面保存着此WebApp的ClassLoader。需要加载WebApp下的类时,就取出ClassLoader来使用
5 回复
发布于 2015-01-06 15:35
什么是原生代码啊?c语言写的啊
什么是原生代码啊?c语言写的啊
点赞 回复
发布于 2017-03-26 00:41
0
c++
c++
点赞 回复
发布于 2017-08-29 17:11
0
  • HotSpot的Bootstrap ClassLoader由C++语言实现
  • MRP、Maxine这些虚拟机整个都是由Java实现所以Bootstrap ClassLoader由Java语言实现(原生代码)
    图片说明
  • HotSpot的Bootstrap ClassLoader由C++语言实现
  • MRP、Maxine这些虚拟机整个都是由Java实现所以Bootstrap ClassLoader由Java语言实现(原生代码)
    图片说明
4 回复
发布于 2021-07-13 00:49
引经据典😃
引经据典😃
点赞 回复
发布于 2022-03-28 10:18
0
A.Bootstrap ClassLoader/启动类加载器,由C++语言编写并嵌套在JVM内部。不是ClassLoader子类
主要负责jdk_home/lib目录下的核心 api 或者由 -Xbootclasspath 选项指定的jar包装入工作.
B、Extension ClassLoader/扩展类加载器,派生于ClassLoader,由Java语言编写。
主要负责jdk_home/lib/ext目录下的jar包或 -Djava.ext.dirs 指定目录下的jar包装入工作
C、System ClassLoader/系统类加载器.(也叫做应用类加载器)是由  Sun  AppClassLoader 实现的。它负责将系统类路径 java -classpath或-Djava.class.path变量所指的目录下 的类库加载到内存中。
D、 APP ClassLoader/系统类加载器,也称为应用程序类加载器,负责加载应用程序classpath目录下的所有jar和class文件。 派生于ClassLoader,由Java语言编写。
有些人说CD其实一样东西,我有点不懂,有没有明白的大神给点建议?

A.Bootstrap ClassLoader/启动类加载器,由C++语言编写并嵌套在JVM内部。不是ClassLoader子类
主要负责jdk_home/lib目录下的核心 api 或者由 -Xbootclasspath 选项指定的jar包装入工作.
B、Extension ClassLoader/扩展类加载器,派生于ClassLoader,由Java语言编写。
主要负责jdk_home/lib/ext目录下的jar包或 -Djava.ext.dirs 指定目录下的jar包装入工作
C、System ClassLoader/系统类加载器.(也叫做应用类加载器)是由  Sun  AppClassLoader 实现的。它负责将系统类路径 java -classpath或-Djava.class.path变量所指的目录下 的类库加载到内存中。
D、 APP ClassLoader/系统类加载器,也称为应用程序类加载器,负责加载应用程序classpath目录下的所有jar和class文件。 派生于ClassLoader,由Java语言编写。
有些人说CD其实一样东西,我有点不懂,有没有明白的大神给点建议?

4 回复
发布于 2017-03-29 10:39
CD是同一个东西
CD是同一个东西
点赞 回复
发布于 2022-09-27 09:17 陕西
0
在tomcat中可能出现不同的应用引用同一个项目的不同版本。 如果使用appclassloader,会造成引用加载错误。 所以每个应用有自己的类加载器。
在tomcat中可能出现不同的应用引用同一个项目的不同版本。 如果使用appclassloader,会造成引用加载错误。 所以每个应用有自己的类加载器。
4 回复
发布于 2016-03-14 20:10
D选项不太确定,涨知识了
D选项不太确定,涨知识了
1 回复
发布于 2021-09-15 12:55
收起
  • 1
  • 2
  • 3
  • 4
多选题
Java
28.
下面关于 Java 中相关流的说法错误的是()
A
从 BufferedReader 对象读取一个字符或字符串可以使用 read() 方法
B
FileInputStream 用于从文件读取数据,它的对象可以用关键字 new 来创建
C
File 类中可以用 mkdir() 或是 mkdirs() 方法来创建文件夹
D
控制台的输出由 print( ) 和 println() 完成,这些方法都由类 PrintWriter 定义,System.out 是该类对象的一个引用
正确答案:AD
你的答案:未作答
官方解析:
A选项错误:BufferedReader类读取字符串应该使用readLine()方法,而不是read()方法。read()方法是用来读取单个字符的,返回的是int类型的ASCII码值。如果要读取字符串,正确的方法是使用readLine()。

D选项错误:System.out实际上是PrintStream类的对象实例,而不是PrintWriter类的对象。print()和println()方法是由PrintStream类定义的。这是一个常见的误解。

B选项正确:FileInputStream确实是用于从文件读取数据的输入流,它是字节流的一种,可以使用new关键字创建对象,这种说法准确。

C选项正确:File类中的mkdir()和mkdirs()方法都可以用来创建文件夹,其中:
- mkdir()方法用于创建单个目录
- mkdirs()方法用于创建多级目录,如果父目录不存在会自动创建父目录

总的来说,这道题主要考察了Java IO流中的基础概念,包括各种流的使用方法和特点。掌握这些知识对于Java程序的文件操作和IO处理非常重要。
知识点:Java
题友讨论(1)
A:read是用来读取单个字符的 但是题目说的是 想读取一个字符或者字符串 所以用read不行 使用readLine

D:PrintStream
A:read是用来读取单个字符的 但是题目说的是 想读取一个字符或者字符串 所以用read不行 使用readLine

D:PrintStream
1 回复
发布于 04-28 15:18 山东
收起
多选题
Linux
29.
在Linux系统中,以下哪个命令用于查看当前系统的负载情况?()
A
top
B
uptime
C
ps
D
netstat
正确答案:AB
你的答案:未作答
官方解析:暂无官方题目解析,去讨论区看看吧!
知识点:Linux
题友讨论(0)
多选题
Linux
30.
在Linux上,对于多进程,子进程继承了父进程的下列哪些?
A
进程地址空间
B
共享内存
C
信号掩码
D
已打开的文件描述符
E
以上都不是
正确答案:BCD
你的答案:未作答
官方解析:
在Linux系统中,子进程通过fork()创建时会继承父进程的许多属性和资源,其中共享内存(B)、信号掩码(C)和已打开的文件描述符(D)都属于继承的范围。

具体分析:
1. 共享内存(B正确):子进程会继承父进程的共享内存段,可以访问父进程已经创建的共享内存区域。这对进程间通信非常重要。

2. 信号掩码(C正确):子进程会继承父进程的信号处理方式和信号掩码。这确保了子进程对信号的处理方式与父进程一致。

3. 已打开的文件描述符(D正确):子进程会继承父进程打开的所有文件描述符。这些描述符在子进程中仍然有效,并指向相同的文件表项。

4. 进程地址空间(A错误):虽然子进程在创建时会复制父进程的地址空间,但这是一个独立的副本,而不是继承。这是通过写时复制(Copy-on-Write)机制实现的,父子进程各自拥有独立的地址空间。

需要注意的是,虽然子进程继承了这些属性,但后续父子进程可以各自独立地修改这些属性,不会相互影响。这种继承机制使得进程创建更加高效,同时也为进程间通信提供了便利。
知识点:Linux、前端工程师、2021
题友讨论(7)

正确答案是BCD

  • 参考CSDN BlogCSDN了解更多。
  • 子进程继承父进程
    • 用户号UIDs和用户组号GIDs
    • 环境Environment
    • 堆栈
    • 共享内存
    • 打开文件的描述符
    • 执行时关闭(Close-on-exec)标志
    • 信号(Signal)控制设定
    • 进程组号
    • 当前工作目录
    • 根目录
    • 文件方式创建屏蔽字
    • 资源限制
    • 控制终端
  • 子进程独有

    • 进程号PID
    • 不同的父进程号
    • 自己的文件描述符和目录流的拷贝
    • 子进程不继承父进程的进程正文(text),数据和其他锁定内存(memory locks)
    • 不继承异步输入和输出
  • 父进程和子进程拥有独立的地址空间和PID参数。

  • 子进程从父进程继承了用户号和用户组号,用户信息,目录信息,环境(表),打开的文件描述符,堆栈,(共享)内存等。
  • 经过fork()以后,父进程和子进程拥有相同内容的代码段、数据段和用户堆栈,就像父进程把自己克隆了一遍。事实上,父进程只复制了自己的PCB块。而代码段,数据段和用户堆栈内存空间并没有复制一份,而是与子进程共享。只有当子进程在运行中出现写操作时,才会产生中断,并为子进程分配内存空间。由于父进程的PCB和子进程的一样,所以在PCB中断中所记录的父进程占有的资源,也是与子进程共享使用的。这里的“共享”一词意味着“竞争”

正确答案是BCD

  • 参考CSDN BlogCSDN了解更多。
  • 子进程继承父进程
    • 用户号UIDs和用户组号GIDs
    • 环境Environment
    • 堆栈
    • 共享内存
    • 打开文件的描述符
    • 执行时关闭(Close-on-exec)标志
    • 信号(Signal)控制设定
    • 进程组号
    • 当前工作目录
    • 根目录
    • 文件方式创建屏蔽字
    • 资源限制
    • 控制终端
  • 子进程独有

    • 进程号PID
    • 不同的父进程号
    • 自己的文件描述符和目录流的拷贝
    • 子进程不继承父进程的进程正文(text),数据和其他锁定内存(memory locks)
    • 不继承异步输入和输出
  • 父进程和子进程拥有独立的地址空间和PID参数。

  • 子进程从父进程继承了用户号和用户组号,用户信息,目录信息,环境(表),打开的文件描述符,堆栈,(共享)内存等。
  • 经过fork()以后,父进程和子进程拥有相同内容的代码段、数据段和用户堆栈,就像父进程把自己克隆了一遍。事实上,父进程只复制了自己的PCB块。而代码段,数据段和用户堆栈内存空间并没有复制一份,而是与子进程共享。只有当子进程在运行中出现写操作时,才会产生中断,并为子进程分配内存空间。由于父进程的PCB和子进程的一样,所以在PCB中断中所记录的父进程占有的资源,也是与子进程共享使用的。这里的“共享”一词意味着“竞争”
40 回复
发布于 2017-03-30 10:06
各进程的地址空间和内存都是独立的,不存在继承关系
各进程的地址空间和内存都是独立的,不存在继承关系
8 回复
发布于 2023-04-17 23:17 安徽
CD
各进程的地址空间和内存都是独立的
CD
各进程的地址空间和内存都是独立的
4 回复
发布于 2017-02-25 21:22

B. 共享内存 子进程会继承父进程所拥有的共享内存段。这意味着子进程可以访问父进程已经创建的共享内存段,从而实现进程间的共享数据。

C. 信号掩码 子进程会继承父进程的信号掩码,即父进程中通过sigprocmask设置的信号屏蔽字会被子进程继承。这影响了子进程对各种信号的处理方式。

D. 已打开的文件描述符 子进程会继承父进程已经打开的文件描述符。这意味着子进程可以直接使用父进程已经打开的文件,而无需重新打开。

A. 进程地址空间 子进程会获得与父进程相同的代码段、数据段、堆和栈等进程地址空间的副本。这样子进程就可以直接执行父进程的代码,以及访问相同的变量和数据。


B. 共享内存 子进程会继承父进程所拥有的共享内存段。这意味着子进程可以访问父进程已经创建的共享内存段,从而实现进程间的共享数据。

C. 信号掩码 子进程会继承父进程的信号掩码,即父进程中通过sigprocmask设置的信号屏蔽字会被子进程继承。这影响了子进程对各种信号的处理方式。

D. 已打开的文件描述符 子进程会继承父进程已经打开的文件描述符。这意味着子进程可以直接使用父进程已经打开的文件,而无需重新打开。

A. 进程地址空间 子进程会获得与父进程相同的代码段、数据段、堆和栈等进程地址空间的副本。这样子进程就可以直接执行父进程的代码,以及访问相同的变量和数据。

3 回复
发布于 2023-09-11 20:40 湖南
进程id不一样,进程地址空间当然不一样
进程id不一样,进程地址空间当然不一样
1 回复
发布于 2023-06-09 07:35 广东 来自Android客户端
各进程的地址空间和内存是独立的
各进程的地址空间和内存是独立的
点赞 回复
发布于 2022-06-16 15:16 来自Android客户端
ABD
ABD
点赞 回复
发布于 2017-02-25 19:03
收起